Compare commits
No commits in common. "fb28af7e0a56ba3ea339c82526895de57c055baf" and "0cc04808b395d4f3af3991c1fe152d29f1320569" have entirely different histories.
fb28af7e0a
...
0cc04808b3
|
@ -28,7 +28,7 @@ class FindXMAS:
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _part2(self) -> int:
|
def _part2(self) -> int:
|
||||||
return len(self.locate_x_mas()) // 2
|
return len(self.locate_x_mas())
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _to_grid(input: str) -> List[List[str]]:
|
def _to_grid(input: str) -> List[List[str]]:
|
||||||
|
@ -98,14 +98,13 @@ class FindXMAS:
|
||||||
if loc[1] in oth:
|
if loc[1] in oth:
|
||||||
locations.append(loc)
|
locations.append(loc)
|
||||||
|
|
||||||
return locations
|
return mas
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
example = FindXMAS(EXAMPLE)
|
example = FindXMAS(EXAMPLE)
|
||||||
print(example)
|
print(example)
|
||||||
assert example._part1 == 18
|
assert example._part1 == 18
|
||||||
assert example._part2 == 9
|
|
||||||
with open("input.txt", "r") as f:
|
with open("input.txt", "r") as f:
|
||||||
puzzle = FindXMAS(f.read())
|
puzzle = FindXMAS(f.read())
|
||||||
print(puzzle)
|
print(puzzle)
|
||||||
|
|
76
day5/run.py
76
day5/run.py
|
@ -1,76 +0,0 @@
|
||||||
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