59 lines
1.6 KiB
Python
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)
|