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.

49 lines
1.0 KiB

import numpy as np
def readGrid():
with open("input") as file:
lines = file.read().splitlines()
grid = np.array([[val for val in line] for line in lines], dtype=int)
return grid
def getAdjacent(grid, x, y):
h, w = grid.shape
adjAdd = [
(-1, -1),
(-1, 0),
(-1, 1),
(0, 1),
(1, 1),
(1, 0),
(1, -1),
(0, -1)
]
adj = [(x + addX, y + addY) for addX, addY in adjAdd]
return [(x, y) for x, y in adj if w > x >= 0 and h > y >= 0]
def solve(grid):
flashCount = 0
i = 0
while True:
i += 1
grid += 1
allFlashPositions = set()
while len(grid[grid > 9]) > len(allFlashPositions):
flashPositions = {(x, y) for y, x in np.argwhere(grid > 9)}.difference(allFlashPositions)
for x, y in flashPositions:
for ax, ay in getAdjacent(grid, x, y):
grid[ay][ax] += 1
allFlashPositions = allFlashPositions.union(flashPositions)
for x, y in allFlashPositions:
grid[y][x] = 0
flashCount += len(allFlashPositions) if i <= 100 else 0
if len(allFlashPositions) == 100:
break
return flashCount, i
print(solve(readGrid()))