48 lines
1.3 KiB
Python
Executable file
48 lines
1.3 KiB
Python
Executable file
#!/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
|
|
for line in lines:
|
|
matches = re.findall(r"mul\((\d+),(\d+)\)", 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()
|