diff options
Diffstat (limited to '2024/day7/solve2.py')
-rw-r--r-- | 2024/day7/solve2.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/2024/day7/solve2.py b/2024/day7/solve2.py new file mode 100644 index 0000000..f508ad9 --- /dev/null +++ b/2024/day7/solve2.py @@ -0,0 +1,44 @@ +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)
\ No newline at end of file |