From fb28af7e0a56ba3ea339c82526895de57c055baf Mon Sep 17 00:00:00 2001 From: Evie Litherland-Smith Date: Tue, 24 Dec 2024 10:15:16 +0000 Subject: [PATCH] Start on d5p1 --- day5/run.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 day5/run.py diff --git a/day5/run.py b/day5/run.py new file mode 100644 index 0000000..2471a06 --- /dev/null +++ b/day5/run.py @@ -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)