blob: 4675e85d0c0735fc111dfb767734276fdba6c455 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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)
|