| 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() |