Day5 part1 not committed correctly, start of part2
This commit is contained in:
parent
4e03fc629b
commit
24ca753ed1
@ -5,7 +5,7 @@ from common import condense_page_orders, get_middle_page, parse, update_is_corre
|
||||
def solve(input: tuple[list[tuple[int, int]], list[tuple[int, ...]]]) -> int:
|
||||
raw_page_orders, updates = input
|
||||
not_before, not_after = condense_page_orders(raw_page_orders)
|
||||
middle_pages = [0]
|
||||
middle_pages = map(get_middle_page, filter(lambda u: update_is_correct(u, not_before, not_after), updates))
|
||||
|
||||
return sum(middle_pages)
|
||||
|
||||
|
@ -1,42 +1,16 @@
|
||||
#!/usr/bin/env python
|
||||
from common import get_middle_page, parse
|
||||
from common import condense_page_orders, get_middle_page, parse, update_is_correct
|
||||
|
||||
|
||||
def update_is_correct(
|
||||
update: tuple[int, ...], not_before: dict[int, list[int]], not_after: dict[int, list[int]]
|
||||
) -> bool:
|
||||
correct = True
|
||||
for index, page in enumerate(update[:-1]):
|
||||
correct = all(
|
||||
map(
|
||||
lambda x: x in not_before.get(page, []) and x not in not_after.get(page, []),
|
||||
update[index + 1 :],
|
||||
)
|
||||
)
|
||||
if not correct:
|
||||
break
|
||||
return correct
|
||||
|
||||
|
||||
def condense_page_orders(page_orders: list[tuple[int, int]]) -> tuple[dict[int, list[int]], dict[int, list[int]]]:
|
||||
not_before = {}
|
||||
not_after = {}
|
||||
for item in page_orders:
|
||||
if item[0] in not_before:
|
||||
not_before[item[0]].append(item[1])
|
||||
else:
|
||||
not_before[item[0]] = [item[1]]
|
||||
if item[1] in not_after:
|
||||
not_after[item[1]].append(item[0])
|
||||
else:
|
||||
not_after[item[1]] = [item[0]]
|
||||
return not_before, not_after
|
||||
def reorder(incorrect_update: tuple[int, ...], not_before, not_after) -> tuple[int, ...]:
|
||||
return tuple()
|
||||
|
||||
|
||||
def solve(input: tuple[list[tuple[int, int]], list[tuple[int, ...]]]) -> int:
|
||||
raw_page_orders, updates = input
|
||||
not_before, not_after = condense_page_orders(raw_page_orders)
|
||||
middle_pages = map(get_middle_page, filter(lambda u: update_is_correct(u, not_before, not_after), updates))
|
||||
incorrect_updates = filter(lambda u: not update_is_correct(u, not_before, not_after), updates)
|
||||
middle_pages = [map(get_middle_page, sorted(incorrect_updates, key=lambda x: reorder(x, not_before, not_after)))]
|
||||
|
||||
return sum(middle_pages)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user