diff options
author | Botond Hende <nettingman@gmail.com> | 2024-12-11 10:18:23 +0100 |
---|---|---|
committer | Botond Hende <nettingman@gmail.com> | 2024-12-11 10:18:23 +0100 |
commit | 0a5c1f77d01fc0bd166494787f24562e2fd3a9e9 (patch) | |
tree | 99b0d38ef86653b6ff4aae26381ebdf0895f829d /2024/day03/solve2.py | |
parent | cbf5c348db4a693b15e455a23e07072587edf4b0 (diff) |
renamed day folders to two digit format
Diffstat (limited to '2024/day03/solve2.py')
-rw-r--r-- | 2024/day03/solve2.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/2024/day03/solve2.py b/2024/day03/solve2.py new file mode 100644 index 0000000..3564eca --- /dev/null +++ b/2024/day03/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)
|