advent of code 2025

day 5 pain

kot.pink 4637a3af f19cc6a5

verified
Changed files
+55
+44
5.py
···
···
+
import sys
+
import heapq
+
from typing import List, Tuple, Optional
+
+
listed_in_range = 0
+
file = '5.input' if len(sys.argv) <= 1 else sys.argv[1]
+
+
ranges = []
+
numbers = None
+
for line in open(file).readlines():
+
line = line.strip()
+
if line == '':
+
numbers = []
+
elif numbers is not None:
+
numbers.append(int(line))
+
else:
+
heapq.heappush(ranges, tuple(map(int, line.split('-'))))
+
+
for num in numbers:
+
for start, end in ranges:
+
if start <= num and num <= end:
+
listed_in_range += 1
+
break
+
+
print(f'p1: {listed_in_range}')
+
+
dedup_ranges = []
+
last_start, last_end = None, None
+
while ranges:
+
start, end = heapq.heappop(ranges)
+
if last_start is None:
+
last_start, last_end = start, end
+
elif start <= last_end: # merge interval
+
# print("merge", last_start, last_end, "with", start, end)
+
last_start, last_end = last_start, max(last_end, end)
+
else: # commit interval
+
# print("commit", last_start, last_end)
+
dedup_ranges.append((last_start, last_end))
+
last_start, last_end = start, end
+
+
dedup_ranges.append((last_start, last_end))
+
# print(dedup_ranges)
+
+
print(f'p2: {sum(end - start + 1 for start, end in dedup_ranges)}')
+11
5.test
···
···
+
3-5
+
10-14
+
16-20
+
12-18
+
+
1
+
5
+
8
+
11
+
17
+
32