Finished day5
This commit is contained in:
parent
0e026e3ba4
commit
719347a77e
21
day5/run.py
21
day5/run.py
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue