advent of code 2025
at main 1.2 kB view raw
1import sys 2import heapq 3from typing import List, Tuple, Optional 4 5listed_in_range = 0 6file = '5.input' if len(sys.argv) <= 1 else sys.argv[1] 7 8ranges = [] 9numbers = None 10for 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 19for num in numbers: 20 for start, end in ranges: 21 if start <= num and num <= end: 22 listed_in_range += 1 23 break 24 25print(f'p1: {listed_in_range}') 26 27dedup_ranges = [] 28last_start, last_end = None, None 29while 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 41dedup_ranges.append((last_start, last_end)) 42# print(dedup_ranges) 43 44print(f'p2: {sum(end - start + 1 for start, end in dedup_ranges)}')