generated from public/aoc_template
day5
This commit is contained in:
parent
c4c5f691be
commit
5796d65b3d
62
day05.py
Normal file
62
day05.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
from tools.aoc import AOCDay
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
def is_update_valid(rules: list[list[int]], update: list[int]) -> bool:
|
||||||
|
for rule in rules:
|
||||||
|
if rule[0] in update and rule[1] in update and update.index(rule[0]) > update.index(rule[1]):
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
inputs = [
|
||||||
|
[
|
||||||
|
(143, "input5_test"),
|
||||||
|
(5732, "input5"),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
(123, "input5_test"),
|
||||||
|
(4716, "input5"),
|
||||||
|
],
|
||||||
|
]
|
||||||
|
|
||||||
|
def parse_input(self) -> tuple[list[list[int]], list[list[int]]]:
|
||||||
|
rules, pages = self.getMultiLineInputAsArray()
|
||||||
|
rule_list = [list(map(int, s.split("|"))) for s in rules]
|
||||||
|
update_list = [list(map(int, s.split(","))) for s in pages]
|
||||||
|
return rule_list, update_list
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
rules, updates = self.parse_input()
|
||||||
|
|
||||||
|
ans = 0
|
||||||
|
for update in updates:
|
||||||
|
if is_update_valid(rules, update):
|
||||||
|
ans += update[len(update) // 2]
|
||||||
|
|
||||||
|
return ans
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
rules, updates = self.parse_input()
|
||||||
|
|
||||||
|
ans = 0
|
||||||
|
for update in updates:
|
||||||
|
if is_update_valid(rules, update):
|
||||||
|
continue
|
||||||
|
|
||||||
|
while not is_update_valid(rules, update):
|
||||||
|
for rule in rules:
|
||||||
|
if rule[0] in update and rule[1] in update and update.index(rule[0]) > update.index(rule[1]):
|
||||||
|
a, b = update.index(rule[0]), update.index(rule[1])
|
||||||
|
update[a], update[b] = update[b], update[a]
|
||||||
|
|
||||||
|
ans += update[len(update) // 2]
|
||||||
|
|
||||||
|
return ans
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
day = Day(2024, 5)
|
||||||
|
day.run(verbose=True)
|
||||||
1369
inputs/input5
Normal file
1369
inputs/input5
Normal file
File diff suppressed because it is too large
Load Diff
28
inputs/input5_test
Normal file
28
inputs/input5_test
Normal file
@ -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