from tools.aoc import AOCDay from typing import Any from tools.coordinate import Coordinate from tools.grid import Grid class Day(AOCDay): inputs = [ [ (6, "input8_test"), (110, "input8"), ], [ ("ZJHRKCPLYJ", "input8"), ], ] def parse_input(self) -> Grid: grid = Grid() for line in self.getInput(): grid.maxX = 49 grid.maxY = 5 if line.startswith("rect"): _, dim = line.split() dx, dy = map(int, dim.split("x")) for x in range(dx): for y in range(dy): grid.set(Coordinate(x, y)) elif line.startswith("rotate row"): _, _, dy, _, shift = line.split() shift = int(shift) dy = int(dy[2:]) orig = grid.get_row(dy) orig = orig[-shift:] + orig[:-shift] for x, v in enumerate(orig): grid.set(Coordinate(x, dy), v) elif line.startswith("rotate column"): _, _, dx, _, shift = line.split() shift = int(shift) dx = int(dx[2:]) orig = grid.get_column(int(dx)) orig = orig[-shift:] + orig[:-shift] for y, v in enumerate(orig): grid.set(Coordinate(dx, y), v) return grid def part1(self) -> Any: return self.parse_input().getOnCount() def part2(self) -> Any: return self.parse_input().get_aoc_ocr_string() if __name__ == "__main__": day = Day(2016, 8) day.run(verbose=True)