123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- import enum
- import logging
-
- from sys import stdout
- from typing import List, Tuple
-
- logger = logging.Logger(__name__)
- logger_2 = logging.Logger(f"{__name__}_2")
- formatter = logging.Formatter('[%(asctime)s][%(levelname)s] %(message)s')
- sh = logging.StreamHandler(stdout)
- sh.setLevel(logging.INFO)
- sh.setFormatter(formatter)
- fh = logging.FileHandler("./day02-2.log", mode="w", encoding="utf-8")
- fh_2 = logging.FileHandler("./day02-2_round2.log", mode="w", encoding="utf-8")
- fh.setLevel(logging.DEBUG)
- fh.setFormatter(formatter)
- fh_2.setLevel(logging.DEBUG)
- fh_2.setFormatter(formatter)
- logger.addHandler(sh)
- logger.addHandler(fh)
- logger_2.addHandler(fh_2)
-
- class Direction(enum.Enum):
- UP = 0
- RIGHT = 1
- DOWN = 2
- LEFT = 3
-
- class Guard:
- def __init__(self, initial_x: int, initial_y: int, initial_dir: int) -> object:
- self.x = self.initial_x = initial_x
- self.y = self.initial_y = initial_y
- self.direction = self.initial_dir = initial_dir
-
- @property
- def dir(self):
- return self.direction
-
- @property.setter
- def dir(self, new_dir: Direction) -> None:
- self.direction = new_dir
-
- def find_guard(grid: List[List[str]], gchar: str) -> Tuple[int,int]:
- breakout = False
- x,y,dir = None,None,None
- for j, line in grid:
- if breakout:
- break
- for i, char in line:
- if char in ["^",">","<","v"]:
- x, y = i, j
- match char:
- case "^":
- dir = Direction.UP
- case ">":
- dir = Direction.RIGHT
- case "v":
- dir = Direction.DOWN
- case "<":
- dir = Direction.LEFT
- case "_":
- raise ValueError(f"char must be one of '^','>','v','<', received {char}")
- breakout = True
- break
- return (x,y,dir)
-
- def main061():
- with open("input06.txt", "r", encoding="utf-8") as f:
- grid = [list(l.split(" ")) for l in f.readlines()]
-
- guard_position = find_guard(grid)
-
-
- if __name__ == "__main__":
- main061()
|