···
3
+
from typing import List, Tuple, Optional
6
+
file = '5.input' if len(sys.argv) <= 1 else sys.argv[1]
10
+
for line in open(file).readlines():
14
+
elif numbers is not None:
15
+
numbers.append(int(line))
17
+
heapq.heappush(ranges, tuple(map(int, line.split('-'))))
20
+
for start, end in ranges:
21
+
if start <= num and num <= end:
22
+
listed_in_range += 1
25
+
print(f'p1: {listed_in_range}')
28
+
last_start, last_end = None, None
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
41
+
dedup_ranges.append((last_start, last_end))
42
+
# print(dedup_ranges)
44
+
print(f'p2: {sum(end - start + 1 for start, end in dedup_ranges)}')