def is_valid_entry(ent: tuple[int, list[int]], current_result: int = 0, current_index: int = 0) -> bool: if current_index == 0: current_result += ent[1][current_index] return is_valid_entry(ent, current_result, current_index + 1) if current_index >= len(ent[1]): if current_result == ent[0]: return True return False new_result = current_result + ent[1][current_index] if new_result <= ent[0]: if is_valid_entry(ent, new_result, current_index + 1): return True new_result = current_result * ent[1][current_index] if new_result <= ent[0]: if is_valid_entry(ent, new_result, current_index + 1): return True new_result = int(f"{current_result}{ent[1][current_index]}") if new_result <= ent[0]: if is_valid_entry(ent, new_result, current_index + 1): return True return False entries = [] with open("input") as f: for line in f: line = line.strip() split = line.split(": ") entries.append((int(split[0]), [int(elem) for elem in split[1].split(" ")])) result = 0 for entry in entries: if is_valid_entry(entry): result += entry[0] print(result)