aoc2021/day13.py
2021-12-13 06:52:33 +01:00

60 lines
1.8 KiB
Python

from tools.aoc import AOCDay
from typing import Any
from tools.coordinate import Coordinate
from tools.grid import Grid
def buildGrid(coords: str) -> Grid:
grid = Grid(0)
for c in coords.split(";"):
x, y = map(int, c.split(","))
grid.set(Coordinate(x, y), 1)
return grid
def fold(grid: Grid, direction: str, axis: int):
if direction == "y":
for y in range(axis + 1, grid.maxY + 1):
targetY = axis - (y - axis)
for x in range(grid.minX, grid.maxX + 1):
grid.add(Coordinate(x, targetY), grid.get(Coordinate(x, y)))
grid.maxY = axis - 1
elif direction == "x":
for x in range(axis + 1, grid.maxX + 1):
targetX = axis - (x - axis)
for y in range(grid.minY, grid.maxY + 1):
grid.add(Coordinate(targetX, y), grid.get(Coordinate(x, y)))
grid.maxX = axis - 1
class Day(AOCDay):
test_solutions_p1 = [17, 701]
test_solutions_p2 = []
def part1(self) -> Any:
coords, folds = self.getMultiLineInputAsArray(join_char=";")
grid = buildGrid(coords)
fold_1 = folds.split(";")[0]
direction, axis = fold_1.split()[-1].split("=")
fold(grid, direction, int(axis))
onCount = 0
for x in range(grid.minX, grid.maxX + 1):
for y in range(grid.minY, grid.maxY + 1):
onCount += grid.get(Coordinate(x, y)) > 0
return onCount
def part2(self) -> Any:
coords, folds = self.getMultiLineInputAsArray(join_char=";")
grid = buildGrid(coords)
for thisFold in folds.split(";"):
direction, axis = thisFold.split()[-1].split("=")
fold(grid, direction, int(axis))
grid.print(true_char='#')
return "see image above"