Untitled

 avatar
unknown
python
2 years ago
1.2 kB
4
Indexable
from collections import defaultdict

with open('input-5.txt', 'r') as f:
    parts = f.read().split('\n\n')

_, reqs = parts[0].split(': ')
seeds = [int(x) for x in reqs.split(' ')]
intervals = [(a, a+b) for a,b in zip(seeds[::2], seeds[1::2])]
intervals = sorted(intervals)[::-1]

for fromto in parts[1:]:
    bounds_val = defaultdict(lambda: 0)
    bounds = set()
    for r in fromto.split('\n')[1:]:
        new, old, ran = [int(x) for x in r.split(' ')]
        bounds.add(old)
        bounds.add(old + ran)
        bounds_val[old] = new - old
    mapping = [(x, bounds_val[x]) for x in sorted(list(bounds), reverse=True)]

    new_intervals = []
    curr_delta = 0
    while intervals:
        x1, x2 = intervals.pop()
        while mapping and mapping[-1][0] <= x1:
            _, curr_delta = mapping.pop()
        if len(mapping) == 0:
            new_intervals.append((x1 + curr_delta, x2 + curr_delta))
        elif mapping[-1][0] < x2:
            new_intervals.append((x1 + curr_delta, mapping[-1][0] + curr_delta))
            intervals.append((mapping[-1][0], x2))
        else:
            new_intervals.append((x1 + curr_delta, x2 + curr_delta))
    intervals = sorted(new_intervals)[::-1]

print(intervals[-1][0])

Editor is loading...
Leave a Comment