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)}')