#!/usr/bin/env python3 import re from typing import List, Tuple class Solver: def __init__(self) -> None: self.input: str = "" self.vals: List[Tuple[str, str]] = [] self.clean_vals: List[Tuple[int, int]] = [] self.pattern: str = r"mul\((-?\d+),(-?\d+)\)" self.result: int = 0 def read(self) -> None: with open("input") as f: self.input = f.read() def get_matches(self) -> None: self.vals = re.findall(self.pattern, self.input) def clean_matches(self) -> None: for pair in self.vals: val1: int = int(pair[0]) val2: int = int(pair[1]) clean_tuple: Tuple[int, int] = (val1, val2) self.clean_vals.append(clean_tuple) def calculate_result(self) -> int: for pair in self.clean_vals: tmp: int = pair[0] * pair[1] self.result += tmp return self.result def main() -> None: solution: Solver = Solver() solution.read() solution.get_matches() solution.clean_matches() result: int = solution.calculate_result() print(result) if __name__ == "__main__": main()