AdventOfCode/Python/2025/05/main.py

36 lines
967 B
Python
Raw Permalink Normal View History

2026-01-12 12:56:52 -08:00
import bisect
intervals, ids = open("input", 'r').read().split("\n\n")
intervals = sorted([
[int(nm) for nm in interval.split("-")] for interval in intervals.split("\n")
])
ids = [int(id) for id in ids.rstrip().split("\n")]
# Merge intervals
merged_intervals = [intervals[0]]
for interval in intervals[1:]:
if interval[0] <= merged_intervals[-1][1]:
merged_intervals[-1][1] = max(interval[1], merged_intervals[-1][1])
else:
merged_intervals.append(interval)
def check_id_in_intervals(id, intervals):
left_interval = bisect.bisect(intervals,id,key=lambda l: l[0])-1
if left_interval < 0:
return False
return id <= intervals[left_interval][1]
fresh_ids = [
check_id_in_intervals(id, merged_intervals)
for id in ids
]
print(len([fresh_id for fresh_id in fresh_ids if fresh_id is True]))
# Part 2
total = 0
for interval in merged_intervals:
start, end = interval
total += end - start + 1
print(total)