def solve_part1(equation): test_value, numbers_str = equation.split(":") test_value = int(test_value) numbers = [int(x) for x in numbers_str.split()] def evaluate(index, current_value): if index == len(numbers): return current_value == test_value if evaluate(index + 1, current_value + numbers[index]): return True if evaluate(index + 1, current_value * numbers[index]): return True return False return evaluate(1, numbers[0]) def solve_part2(equation): test_value, numbers_str = equation.split(":") test_value = int(test_value) numbers = [int(x) for x in numbers_str.split()] def evaluate(index, current_value): if index == len(numbers): return current_value == test_value if evaluate(index + 1, current_value + numbers[index]): return True if evaluate(index + 1, current_value * numbers[index]): return True if evaluate(index + 1, int(str(current_value) + str(numbers[index]))): return True return False return evaluate(1, numbers[0]) with open("./input.txt") as f: equations = f.readlines() part1_sum = 0 for equation in equations: if solve_part1(equation.strip()): test_value, _ = equation.split(":") part1_sum += int(test_value) print(part1_sum) part2_sum = 0 for equation in equations: if solve_part2(equation.strip()): test_value, _ = equation.split(":") part2_sum += int(test_value) print(part2_sum)