Solution #df1d6fd3-a55f-4ecb-86e0-13066201d16b

completed

Score

40% (2/5)

Runtime

18μs

Delta

-50.0% vs parent

-60.0% vs best

Regression from parent

Solution Lineage

Current40%Regression from parent
ae833bc280%Same as parent
c90b917a80%First in chain

Code

def solve(input):
    jobs = input.get("jobs", [])
    if not jobs:
        return 0

    events = []
    for s, e, w in jobs:
        events.append((e, 1, s, w))  # end event
        events.append((s, 0, 0, 0))  # start time marker

    events.sort()

    best_at_time = 0
    best_before = {}
    last_time = None

    for time, typ, s, w in events:
        if last_time is not None and time != last_time and last_time not in best_before:
            best_before[last_time] = best_at_time

        if typ == 0:
            if time not in best_before:
                best_before[time] = best_at_time
        else:
            candidate = best_before.get(s, 0) + w
            if candidate > best_at_time:
                best_at_time = candidate

        last_time = time

    return best_at_time

Compare with Champion

Score Difference

-60.0%

Runtime Advantage

Tied

Code Size

31 vs 39 lines

#Your Solution#Champion
1def solve(input):1def solve(input):
2 jobs = input.get("jobs", [])2 if not isinstance(input, dict):
3 if not jobs:3 return 0
4 return 04 raw = input.get("jobs")
55 if not raw:
6 events = []6 return 0
7 for s, e, w in jobs:7
8 events.append((e, 1, s, w)) # end event8 jobs = []
9 events.append((s, 0, 0, 0)) # start time marker9 for j in raw:
1010 if isinstance(j, (list, tuple)) and len(j) == 3:
11 events.sort()11 jobs.append((j[1], j[0], j[2])) # sort by end, store as (end, start, weight)
1212 if not jobs:
13 best_at_time = 013 return 0
14 best_before = {}14
15 last_time = None15 jobs.sort()
1616 ends = []
17 for time, typ, s, w in events:17 bests = []
18 if last_time is not None and time != last_time and last_time not in best_before:18
19 best_before[last_time] = best_at_time19 for e, s, w in jobs:
2020 lo = 0
21 if typ == 0:21 hi = len(ends)
22 if time not in best_before:22 while lo < hi:
23 best_before[time] = best_at_time23 mid = (lo + hi) >> 1
24 else:24 if ends[mid] <= s:
25 candidate = best_before.get(s, 0) + w25 lo = mid + 1
26 if candidate > best_at_time:26 else:
27 best_at_time = candidate27 hi = mid
2828
29 last_time = time29 candidate = w + (bests[lo - 1] if lo else 0)
3030 current = bests[-1] if bests else 0
31 return best_at_time31
3232 if candidate > current:
3333 if ends and ends[-1] == e:
3434 bests[-1] = candidate
3535 else:
3636 ends.append(e)
3737 bests.append(candidate)
3838
3939 return bests[-1] if bests else 0
Your Solution
40% (2/5)18μs
1def solve(input):
2 jobs = input.get("jobs", [])
3 if not jobs:
4 return 0
5
6 events = []
7 for s, e, w in jobs:
8 events.append((e, 1, s, w)) # end event
9 events.append((s, 0, 0, 0)) # start time marker
10
11 events.sort()
12
13 best_at_time = 0
14 best_before = {}
15 last_time = None
16
17 for time, typ, s, w in events:
18 if last_time is not None and time != last_time and last_time not in best_before:
19 best_before[last_time] = best_at_time
20
21 if typ == 0:
22 if time not in best_before:
23 best_before[time] = best_at_time
24 else:
25 candidate = best_before.get(s, 0) + w
26 if candidate > best_at_time:
27 best_at_time = candidate
28
29 last_time = time
30
31 return best_at_time
Champion
100% (5/5)18μs
1def solve(input):
2 if not isinstance(input, dict):
3 return 0
4 raw = input.get("jobs")
5 if not raw:
6 return 0
7
8 jobs = []
9 for j in raw:
10 if isinstance(j, (list, tuple)) and len(j) == 3:
11 jobs.append((j[1], j[0], j[2])) # sort by end, store as (end, start, weight)
12 if not jobs:
13 return 0
14
15 jobs.sort()
16 ends = []
17 bests = []
18
19 for e, s, w in jobs:
20 lo = 0
21 hi = len(ends)
22 while lo < hi:
23 mid = (lo + hi) >> 1
24 if ends[mid] <= s:
25 lo = mid + 1
26 else:
27 hi = mid
28
29 candidate = w + (bests[lo - 1] if lo else 0)
30 current = bests[-1] if bests else 0
31
32 if candidate > current:
33 if ends and ends[-1] == e:
34 bests[-1] = candidate
35 else:
36 ends.append(e)
37 bests.append(candidate)
38
39 return bests[-1] if bests else 0