From 0a5c1f77d01fc0bd166494787f24562e2fd3a9e9 Mon Sep 17 00:00:00 2001 From: Botond Hende Date: Wed, 11 Dec 2024 10:18:23 +0100 Subject: renamed day folders to two digit format --- 2024/day03/solve2.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 2024/day03/solve2.py (limited to '2024/day03/solve2.py') 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) -- cgit v1.2.3-70-g09d2