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
def _part2(self) -> int:
return None
return sum([int(val[len(val) // 2]) for val in self.fix_page_order()])
def parse_rules(
self, rules: List[str], sep: str = "|"
@ -71,16 +71,31 @@ class CheckManual:
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]:
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__":
example = CheckManual(EXAMPLE)
print(example)
assert example._part1 == 143
assert example._part2 == 123
with open("input.txt", "r") as f:
main = CheckManual(f.read())
print(main)