From 2db5e5361d4206ab1636fc4208bec9d93526b03b Mon Sep 17 00:00:00 2001 From: Botond Hende Date: Sat, 7 Dec 2024 11:13:24 +0100 Subject: 2024 day5 and day6 first part --- 2024/day5/solve2.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 2024/day5/solve2.py (limited to '2024/day5/solve2.py') diff --git a/2024/day5/solve2.py b/2024/day5/solve2.py new file mode 100644 index 0000000..4675e85 --- /dev/null +++ b/2024/day5/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) -- cgit v1.2.3-70-g09d2