blob: 3564eca3f60fa13bdf08e891fd5bc465d6d1ddda (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import re
pattern = re.compile('mul\\(([0-9]{1,3}),([0-9]{1,3})\\)')
do_pattern = re.compile('do\\(\\)')
dont_pattern = re.compile("don't\\(\\)")
with open("input") as f:
data = f.read()
do_dont_intervals = []
for match in do_pattern.finditer(data):
do_dont_intervals.append((match.start(), True))
for match in dont_pattern.finditer(data):
do_dont_intervals.append((match.start(), False))
do_dont_intervals.sort(key=lambda elem: elem[0])
def get_do_state(intervals: list[tuple[int, bool]], pos: int):
current_state = True
for elem in intervals:
if elem[0] > pos:
break
else:
current_state = elem[1]
return current_state
result = 0
for match in pattern.finditer(data):
if get_do_state(do_dont_intervals, match.start()):
result += int(match.group(1)) * int(match.group(2))
print(result)
|