#!/usr/bin/env python import numpy as np from scipy.ndimage import convolve with open("day11.txt") as data: octopi = np.array([list(map(int, line.strip())) for line in data]) neighbors = np.ones((3,3), dtype=int) step = 0 flashes = 0 while True: octopi += 1 flashed = np.zeros_like(octopi, dtype=bool) while (flashing := ((octopi > 9) & ~flashed)).any(): octopi += convolve(flashing.astype(int), neighbors, mode='constant') flashed |= flashing octopi[flashed] = 0 flashes += flashed.sum() step += 1 if step == 100: print(flashes) if np.all(octopi == 0): print(step) break