Spaces:
Running
Running
File size: 1,631 Bytes
a4da721 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
def parse_input(filename):
equations = []
with open(filename, 'r') as f:
for line in f:
test_value, numbers = line.strip().split(': ')
test_value = int(test_value)
numbers = [int(x) for x in numbers.split()]
equations.append((test_value, numbers))
return equations
def evaluate(numbers, operators):
result = numbers[0]
for i, op in enumerate(operators):
if op == '+':
result += numbers[i + 1]
elif op == '*':
result *= numbers[i + 1]
elif op == '||':
result = int(str(result) + str(numbers[i + 1]))
return result
def try_all_combinations(test_value, numbers, operators_set):
if len(numbers) == 1:
return test_value == numbers[0]
n = len(numbers) - 1 # number of operators needed
for ops in itertools.product(operators_set, repeat=n):
if evaluate(numbers, ops) == test_value:
return True
return False
import itertools
def solve_part1(equations):
total = 0
operators = ['+', '*']
for test_value, numbers in equations:
if try_all_combinations(test_value, numbers, operators):
total += test_value
return str(total)
def solve_part2(equations):
total = 0
operators = ['+', '*', '||']
for test_value, numbers in equations:
if try_all_combinations(test_value, numbers, operators):
total += test_value
return str(total)
# Read input and solve both parts
equations = parse_input("./input.txt")
print(solve_part1(equations))
print(solve_part2(equations)) |