diff options
Diffstat (limited to '2024/day05/solve2.py')
-rw-r--r-- | 2024/day05/solve2.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/2024/day05/solve2.py b/2024/day05/solve2.py new file mode 100644 index 0000000..4675e85 --- /dev/null +++ b/2024/day05/solve2.py @@ -0,0 +1,36 @@ +from functools import cmp_to_key
+
+def is_update_correct(update: list[str], rules: list[tuple[str, str]]) -> bool:
+ for idx, page in enumerate(update):
+ for previous_page in (update[previous_idx] for previous_idx in range(idx)):
+ if (page, previous_page) in rules:
+ return False
+
+ return True
+
+
+rules = []
+updates = []
+
+reading_updates = False
+with open("input") as f:
+ for line in f.readlines():
+ if reading_updates:
+ updates.append(line.strip().split(","))
+ elif line == "\n":
+ reading_updates = True
+ else:
+ rules.append(tuple(line.strip().split("|")))
+
+for idx in range(len(updates) - 1, -1, -1):
+ if is_update_correct(updates[idx], rules):
+ updates.pop(idx)
+
+for update in updates:
+ update.sort(key=cmp_to_key(lambda item1, item2: -1 if (item1, item2) in rules else 1 if (item2, item1) in rules else 0))
+
+result = 0
+for update in updates:
+ result += int(update[len(update) // 2])
+
+print(result)
|