Start on d5p1
This commit is contained in:
parent
86680b4174
commit
fb28af7e0a
76
day5/run.py
Normal file
76
day5/run.py
Normal file
|
@ -0,0 +1,76 @@
|
|||
from typing import Callable, List
|
||||
|
||||
EXAMPLE = """
|
||||
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
|
||||
"""
|
||||
|
||||
|
||||
class CheckManual:
|
||||
def __init__(self, input: str) -> None:
|
||||
self._input = input[1:]
|
||||
sep = self._input.splitlines().index("")
|
||||
self.rules = self.parse_rules(self._input.splitlines()[:sep])
|
||||
self.pages = self._input.splitlines()[sep:]
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"Part1: {self._part1}\nPart2: {self._part2}"
|
||||
|
||||
@property
|
||||
def _part1(self) -> int:
|
||||
return None
|
||||
|
||||
@property
|
||||
def _part2(self) -> int:
|
||||
return None
|
||||
|
||||
def parse_rules(
|
||||
self, rules: List[str], sep: str = "|"
|
||||
) -> List[Callable[[str], bool]]:
|
||||
def make_rule(rule: str, sep: str = "|") -> Callable[[str], bool]:
|
||||
left, right = rule.split(sep)
|
||||
|
||||
def check(pages: str) -> bool:
|
||||
_pages = pages.split(",")
|
||||
try:
|
||||
_pages.index(left) < _pages.index(right)
|
||||
except ValueError:
|
||||
return True
|
||||
|
||||
return check
|
||||
|
||||
return [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]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
example = CheckManual(EXAMPLE)
|
||||
print(example)
|
Loading…
Reference in a new issue