advent of code 2025

day 5 pain

kot.pink 4637a3af f19cc6a5

verified
+55
+44
5.py
··· 1 + import sys 2 + import heapq 3 + from typing import List, Tuple, Optional 4 + 5 + listed_in_range = 0 6 + file = '5.input' if len(sys.argv) <= 1 else sys.argv[1] 7 + 8 + ranges = [] 9 + numbers = None 10 + for line in open(file).readlines(): 11 + line = line.strip() 12 + if line == '': 13 + numbers = [] 14 + elif numbers is not None: 15 + numbers.append(int(line)) 16 + else: 17 + heapq.heappush(ranges, tuple(map(int, line.split('-')))) 18 + 19 + for num in numbers: 20 + for start, end in ranges: 21 + if start <= num and num <= end: 22 + listed_in_range += 1 23 + break 24 + 25 + print(f'p1: {listed_in_range}') 26 + 27 + dedup_ranges = [] 28 + last_start, last_end = None, None 29 + while ranges: 30 + start, end = heapq.heappop(ranges) 31 + if last_start is None: 32 + last_start, last_end = start, end 33 + elif start <= last_end: # merge interval 34 + # print("merge", last_start, last_end, "with", start, end) 35 + last_start, last_end = last_start, max(last_end, end) 36 + else: # commit interval 37 + # print("commit", last_start, last_end) 38 + dedup_ranges.append((last_start, last_end)) 39 + last_start, last_end = start, end 40 + 41 + dedup_ranges.append((last_start, last_end)) 42 + # print(dedup_ranges) 43 + 44 + print(f'p2: {sum(end - start + 1 for start, end in dedup_ranges)}')
+11
5.test
··· 1 + 3-5 2 + 10-14 3 + 16-20 4 + 12-18 5 + 6 + 1 7 + 5 8 + 8 9 + 11 10 + 17 11 + 32