summaryrefslogtreecommitdiff
path: root/2024/day3/solve2.py
diff options
context:
space:
mode:
authorBotond Hende <nettingman@gmail.com>2024-12-03 21:21:47 +0100
committerBotond Hende <nettingman@gmail.com>2024-12-03 21:21:47 +0100
commit755d3322abe7d94ae87e5624bb1aed85bfb30bc3 (patch)
treeea8a7afe1071167a17e3d63f574dad662abcedf1 /2024/day3/solve2.py
parent873d769509c56ddbe84616d9411efc51ef0b4fd3 (diff)
2024 day2-3, 2023 day3 2nd
Diffstat (limited to '2024/day3/solve2.py')
-rw-r--r--2024/day3/solve2.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/2024/day3/solve2.py b/2024/day3/solve2.py
new file mode 100644
index 0000000..3564eca
--- /dev/null
+++ b/2024/day3/solve2.py
@@ -0,0 +1,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)