$grid = grid($input);
$total_flashes = 0;
for ($i = 1; $i < INF; $i++) {
    // Increase all by 1
    $grid = $grid->map(fn ($c) => int($c) + 1);
    // Apply flashing
    $flashes = 0;
    while (true) {
        $flashed = false;
        foreach ($grid->rows() as $y=>$row) foreach ($row as $x=>$cell) {
            if ($cell <= 9) continue;
            $flashed = true;
            $flashes++;
            $grid->set([$x, $y], -INF);
            foreach (neighbors([$x, $y], true) as $ne) {
                if ($grid->get($ne) != null) {
                    $grid->set($ne, $grid->get($ne) + 1);
                }
            }
        }
        if (!$flashed) break;
        if ($flashes == 100) break 2;
    }
    if ($i < 100) {
        $total_flashes += $flashes;
    }
    // Reset all that flashed
    $grid = $grid->map(fn ($c) => $c < 0 ? 0 : $c);
}
$solution_1 = $total_flashes;
$solution_2 = $i;