Finished day5

This commit is contained in:
Evie Litherland-Smith 2024-12-26 10:31:53 +00:00
parent 0e026e3ba4
commit 719347a77e

View file

@ -55,7 +55,7 @@ class CheckManual:
@property @property
def _part2(self) -> int: def _part2(self) -> int:
return None return sum([int(val[len(val) // 2]) for val in self.fix_page_order()])
def parse_rules( def parse_rules(
self, rules: List[str], sep: str = "|" self, rules: List[str], sep: str = "|"
@ -71,16 +71,31 @@ class CheckManual:
return check return check
return [make_rule(rule) for rule in rules] return [(rule, make_rule(rule)) for rule in rules]
def check_page_order(self) -> List[bool]: def check_page_order(self) -> List[bool]:
return [all([check(line) for check in self.rules]) for line in self.pages] return [all([rule[1](line) for rule in self.rules]) for line in self.pages]
def fix_page_order(self) -> List[str]:
to_fix = [page for page, check in zip(self.pages, self.validity) if not check]
fixed = []
for pages in to_fix:
while not all([rule[1](pages) for rule in self.rules]):
for rule in self.rules:
if not rule[1](pages):
break
r1, r2 = rule[0].split("|")
i1, i2 = pages.index(r1), pages.index(r2)
pages[i1], pages[i2] = pages[i2], pages[i1]
fixed.append(pages)
return fixed
if __name__ == "__main__": if __name__ == "__main__":
example = CheckManual(EXAMPLE) example = CheckManual(EXAMPLE)
print(example) print(example)
assert example._part1 == 143 assert example._part1 == 143
assert example._part2 == 123
with open("input.txt", "r") as f: with open("input.txt", "r") as f:
main = CheckManual(f.read()) main = CheckManual(f.read())
print(main) print(main)