Files
advent-of-code-2024/day7/code.py

48 lines
1.2 KiB
Python
Raw Normal View History

2024-12-15 13:45:24 +03:00
import sys
sys.path.append('../aoclib')
from aoclib import Input
def parse_input(lines: list):
equations = list()
for l in lines:
s = l.split(':')
eq = (int(s[0]), [int(x.strip()) for x in s[1].split()])
equations.append(eq)
return equations
2024-12-15 22:29:24 +03:00
def _sum2(l: list[int]) -> list[int]:
return [l[0] + l[1], *l[2:]]
def _mul2(l: list[int]) -> list[int]:
return [l[0] * l[1], *l[2:]]
def _concat2(l: list[int]) -> list[int]:
return [int(str(l[0]) + str(l[1])), *l[2:]]
2024-12-15 13:45:24 +03:00
2024-12-15 22:29:24 +03:00
def may_be_true(val: int, lst: list[int], funcs) -> bool:
2024-12-15 13:45:24 +03:00
if len(lst) == 1:
return lst[0] == val
2024-12-15 22:29:24 +03:00
return any([may_be_true(val, f(lst), funcs) for f in funcs])
def solve1(eqs):
funcs = [_sum2, _mul2]
return sum([e[0] if may_be_true(e[0], e[1], funcs) else 0 for e in eqs])
def solve2(eqs):
funcs = [_sum2, _mul2, _concat2]
return sum([e[0] if may_be_true(e[0], e[1], funcs) else 0 for e in eqs])
2024-12-15 13:45:24 +03:00
if __name__ == '__main__':
2024-12-15 22:29:24 +03:00
#lines = Input('input_test.txt').lines()
lines = Input('input.txt').lines()
2024-12-15 13:45:24 +03:00
eq = parse_input(lines)
#part 1
print('part 1:', solve1(eq))
#part 2
2024-12-15 22:29:24 +03:00
print('part 2:', solve2(eq))