2024 day 5.
This commit is contained in:
parent
55cb5ed745
commit
5312755f32
@ -1,10 +1,49 @@
|
|||||||
import sys
|
import sys
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
lines = sys.stdin.read().splitlines()
|
import networkx as nx
|
||||||
|
|
||||||
answer_1 = ...
|
|
||||||
|
|
||||||
answer_2 = ...
|
def in_correct_order(update: list[int], requirements: dict[int, set[int]]) -> bool:
|
||||||
|
for i_value, value in enumerate(update):
|
||||||
|
if any(value_2 in requirements[value] for value_2 in update[i_value:]):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def fix_order(update: list[int], requirements: dict[int, set[int]]) -> list[int]:
|
||||||
|
graph = nx.DiGraph()
|
||||||
|
graph.add_nodes_from(update)
|
||||||
|
graph.add_edges_from(
|
||||||
|
(v, k)
|
||||||
|
for k, vs in requirements.items()
|
||||||
|
for v in vs
|
||||||
|
if k in update and v in update
|
||||||
|
)
|
||||||
|
|
||||||
|
return list(nx.topological_sort(graph))
|
||||||
|
|
||||||
|
|
||||||
|
part1, part2 = sys.stdin.read().split("\n\n")
|
||||||
|
|
||||||
|
requirements: dict[int, set[int]] = defaultdict(set)
|
||||||
|
for line in part1.splitlines():
|
||||||
|
v1, v2 = line.split("|")
|
||||||
|
requirements[int(v2)].add(int(v1))
|
||||||
|
|
||||||
|
updates = [list(map(int, line.split(","))) for line in part2.splitlines()]
|
||||||
|
|
||||||
|
answer_1 = sum(
|
||||||
|
update[len(update) // 2]
|
||||||
|
for update in updates
|
||||||
|
if in_correct_order(update, requirements)
|
||||||
|
)
|
||||||
|
|
||||||
|
answer_2 = sum(
|
||||||
|
fix_order(update, requirements)[len(update) // 2]
|
||||||
|
for update in updates
|
||||||
|
if not in_correct_order(update, requirements)
|
||||||
|
)
|
||||||
|
|
||||||
print(f"answer 1 is {answer_1}")
|
print(f"answer 1 is {answer_1}")
|
||||||
print(f"answer 2 is {answer_2}")
|
print(f"answer 2 is {answer_2}")
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,28 @@
|
|||||||
|
47|53
|
||||||
|
97|13
|
||||||
|
97|61
|
||||||
|
97|47
|
||||||
|
75|29
|
||||||
|
61|13
|
||||||
|
75|53
|
||||||
|
29|13
|
||||||
|
97|29
|
||||||
|
53|29
|
||||||
|
61|53
|
||||||
|
97|53
|
||||||
|
61|29
|
||||||
|
47|13
|
||||||
|
75|47
|
||||||
|
97|75
|
||||||
|
47|61
|
||||||
|
75|61
|
||||||
|
47|29
|
||||||
|
75|13
|
||||||
|
53|13
|
||||||
|
|
||||||
|
75,47,61,53,29
|
||||||
|
97,61,53,29,13
|
||||||
|
75,29,13
|
||||||
|
75,97,47,61,53
|
||||||
|
61,13,29
|
||||||
|
97,13,75,29,47
|
Loading…
Reference in New Issue
Block a user