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))