summaryrefslogtreecommitdiff
path: root/2024/day7/solve.py
diff options
context:
space:
mode:
authorBotond Hende <nettingman@gmail.com>2024-12-07 13:46:40 +0100
committerBotond Hende <nettingman@gmail.com>2024-12-07 13:46:40 +0100
commit7b4ce352606bb3edc99203444a19cc844b6bd5a3 (patch)
tree6fd7dc774920a5c9f1a56c5108cc0f6eb38a9d99 /2024/day7/solve.py
parente06e6a5162ba5f0857eea2286edcc59d91e70df0 (diff)
2024 day7
Diffstat (limited to '2024/day7/solve.py')
-rw-r--r--2024/day7/solve.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/2024/day7/solve.py b/2024/day7/solve.py
new file mode 100644
index 0000000..4737c9c
--- /dev/null
+++ b/2024/day7/solve.py
@@ -0,0 +1,38 @@
+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
+
+ 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