aoc2016/day08.py
2024-12-28 11:53:10 +01:00

59 lines
1.6 KiB
Python

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)