You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
882 B
31 lines
882 B
import numpy as np
|
|
|
|
with open("input") as file:
|
|
lines = file.read().splitlines()
|
|
splitIndex = lines.index("")
|
|
dotList = np.array([lines[i].split(",") for i in range(splitIndex)], dtype=int)
|
|
col, row = dotList.T
|
|
maxX = np.max(col)
|
|
maxY = np.max(row)
|
|
dotGrid = np.zeros((maxY + 1, maxX + 1), bool)
|
|
dotGrid[row, col] = True
|
|
foldInstructions = [lines[i].split(" ")[2].split("=") for i in range(splitIndex + 1, len(lines))]
|
|
|
|
|
|
def fold(grid, instructions: list):
|
|
for axis, amount in instructions:
|
|
amount = int(amount)
|
|
if axis == "x":
|
|
part1 = grid[:, :amount]
|
|
part2 = grid[:, amount + 1:]
|
|
part2Flipped = np.fliplr(part2)
|
|
else:
|
|
part1 = grid[:amount]
|
|
part2 = grid[amount + 1:]
|
|
part2Flipped = np.flipud(part2)
|
|
grid = part1 + part2Flipped
|
|
print(np.count_nonzero(grid))
|
|
|
|
|
|
fold(dotGrid, foldInstructions)
|
|
# Found part 2 by accident with PyCharms Array View
|
|
|