#!/usr/bin/env python3 # https://adventofcode.com/2024/day/3 import re def get_lines(filename: str) -> list: with open(filename, "r") as file: return [line.strip() for line in file.readlines()] def part1_get_result_sum(lines: list) -> int: result_sum = 0 pattern = re.compile(r"mul\((\d+),(\d+)\)") for line in lines: matches = re.findall(pattern, line) for match in matches: result_sum += int(match[0]) * int(match[1]) return result_sum def part2_get_result_sum(lines: list) -> int: result_sum = 0 active = True pattern = re.compile(r"mul\((\d{1,3}),(\d{1,3})$") for line in lines: chunks = line.split(")") for chunk in chunks: if active: if chunk.endswith("don't("): active = False elif match := re.search(pattern, chunk): result_sum += int(match.group(1)) * int(match.group(2)) elif chunk.endswith("do("): active = True return result_sum def main(): # lines = get_lines("sample-input.txt") lines = get_lines("input.txt") print("Part 1: The sum of the results is", part1_get_result_sum(lines)) print("Part 2: The sum of the results is", part2_get_result_sum(lines)) if __name__ == '__main__': main()