From 3a488334073bd295d1e395e9347e0767c6ac0551 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Tue, 3 Dec 2024 10:13:19 +0000 Subject: [PATCH] 2024: d03: ex2: add solution --- 2024/d03/ex2/ex2.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 2024/d03/ex2/ex2.py diff --git a/2024/d03/ex2/ex2.py b/2024/d03/ex2/ex2.py new file mode 100755 index 0000000..f85fb47 --- /dev/null +++ b/2024/d03/ex2/ex2.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python + +import dataclasses +import re +import sys + + +@dataclasses.dataclass +class MulInstruction: + lhs: int + rhs: int + + def calc(self) -> int: + return self.lhs * self.rhs + + +def solve(input: str) -> int: + def parse(input: str) -> list[MulInstruction]: + res: list[MulInstruction] = [] + + MUL_REGEX = re.compile(r"do\(\)|don't\(\)|mul\((\d+),(\d+)\)") + do = True + for match in MUL_REGEX.finditer(input): + if match.group(0) in ("do()", "don't()"): + do = match.group(0) == "do()" + continue + if not do: + continue + res.append(MulInstruction(int(match.group(1)), int(match.group(2)))) + + return res + + return sum(inst.calc() for inst in parse(input)) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main()