From 7b4ce352606bb3edc99203444a19cc844b6bd5a3 Mon Sep 17 00:00:00 2001 From: Botond Hende Date: Sat, 7 Dec 2024 13:46:40 +0100 Subject: 2024 day7 --- 2024/day7/solve2.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 2024/day7/solve2.py (limited to '2024/day7/solve2.py') 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 -- cgit v1.2.3-70-g09d2