tangled
alpha
login
or
join now
kot.pink
/
aoc
2
fork
atom
advent of code 2025
2
fork
atom
overview
issues
pulls
pipelines
day 5 pain
kot.pink
3 months ago
4637a3af
f19cc6a5
verified
This commit was signed with the committer's
known signature
.
kot.pink
SSH Key Fingerprint:
SHA256:e4bjV3/Jkmz9iPYLTjvwj9VNZdgdgRm8GIc0LYqo0kU=
+55
2 changed files
expand all
collapse all
unified
split
5.py
5.test
+44
5.py
···
1
1
+
import sys
2
2
+
import heapq
3
3
+
from typing import List, Tuple, Optional
4
4
+
5
5
+
listed_in_range = 0
6
6
+
file = '5.input' if len(sys.argv) <= 1 else sys.argv[1]
7
7
+
8
8
+
ranges = []
9
9
+
numbers = None
10
10
+
for line in open(file).readlines():
11
11
+
line = line.strip()
12
12
+
if line == '':
13
13
+
numbers = []
14
14
+
elif numbers is not None:
15
15
+
numbers.append(int(line))
16
16
+
else:
17
17
+
heapq.heappush(ranges, tuple(map(int, line.split('-'))))
18
18
+
19
19
+
for num in numbers:
20
20
+
for start, end in ranges:
21
21
+
if start <= num and num <= end:
22
22
+
listed_in_range += 1
23
23
+
break
24
24
+
25
25
+
print(f'p1: {listed_in_range}')
26
26
+
27
27
+
dedup_ranges = []
28
28
+
last_start, last_end = None, None
29
29
+
while ranges:
30
30
+
start, end = heapq.heappop(ranges)
31
31
+
if last_start is None:
32
32
+
last_start, last_end = start, end
33
33
+
elif start <= last_end: # merge interval
34
34
+
# print("merge", last_start, last_end, "with", start, end)
35
35
+
last_start, last_end = last_start, max(last_end, end)
36
36
+
else: # commit interval
37
37
+
# print("commit", last_start, last_end)
38
38
+
dedup_ranges.append((last_start, last_end))
39
39
+
last_start, last_end = start, end
40
40
+
41
41
+
dedup_ranges.append((last_start, last_end))
42
42
+
# print(dedup_ranges)
43
43
+
44
44
+
print(f'p2: {sum(end - start + 1 for start, end in dedup_ranges)}')
+11
5.test
···
1
1
+
3-5
2
2
+
10-14
3
3
+
16-20
4
4
+
12-18
5
5
+
6
6
+
1
7
7
+
5
8
8
+
8
9
9
+
11
10
10
+
17
11
11
+
32