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.
42 lines
1.2 KiB
42 lines
1.2 KiB
import numpy as np
|
|
from collections import deque
|
|
|
|
file = "inputs/day11.input"
|
|
numbers = [x.decode().replace("\n", "") for x in open(file, "rb").readlines()]
|
|
numbers = [[int(x) for x in number] for number in numbers]
|
|
numbers = np.array(numbers)
|
|
|
|
|
|
def get_ones(x, y):
|
|
ones = np.zeros((numbers.shape[0] + 2, numbers.shape[1] + 2))
|
|
ones[x : x + 3, y : y + 3] = 1
|
|
return ones[1:-1, 1:-1]
|
|
|
|
|
|
flashes = 0
|
|
counter = 0
|
|
synchron_flash = False
|
|
while not synchron_flash:
|
|
counter += 1
|
|
numbers += 1
|
|
nines_x, nines_y = np.where(numbers > 9)
|
|
coords = list(zip(nines_x, nines_y))
|
|
flashed = []
|
|
while len(coords) > 0:
|
|
coord = coords.pop()
|
|
flashed.append(coord)
|
|
x, y = coord
|
|
ones = get_ones(x, y)
|
|
numbers += ones.astype("int64")
|
|
nines_x, nines_y = np.where(numbers > 9)
|
|
new_coords = list(zip(nines_x, nines_y))
|
|
for new_coord in new_coords:
|
|
if new_coord not in flashed and new_coord not in coords:
|
|
coords.append(new_coord)
|
|
for flash in flashed:
|
|
x, y = flash
|
|
numbers[x, y] = 0
|
|
if len(flashed) == 100:
|
|
print(counter)
|
|
synchron_flash = True
|