From 24ca753ed1ecd48202a1cfb62181f1e756ecaefd Mon Sep 17 00:00:00 2001 From: Fedaya Date: Thu, 5 Dec 2024 08:14:54 +0100 Subject: [PATCH] Day5 part1 not committed correctly, start of part2 --- day5/part1.py | 2 +- day5/part2.py | 36 +++++------------------------------- 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/day5/part1.py b/day5/part1.py index ab5b821..219467d 100755 --- a/day5/part1.py +++ b/day5/part1.py @@ -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) diff --git a/day5/part2.py b/day5/part2.py index 0c0cc9e..ab7a25c 100755 --- a/day5/part2.py +++ b/day5/part2.py @@ -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)