#!/bin/bash i_max=-1 j_max=0 octopi=() flashes=() n_flashes=0 while read line; do if [ $i_max -lt 0 ]; then i_max=${#line} fi octopi+=( $(sed 's/\([0-9]\)/\1 /g' <<< $line) ) j_max=$((j_max+1)) done for i in $(seq 0 $((i_max-1))); do for j in $(seq 0 $((j_max-1))); do flashes+=( 0 ) done done check_flash () { local i=$1 local j=$2 local i_2 local j_2 if [ ${octopi[$((i+j*i_max))]} -gt 9 ] && [ ${flashes[$((i+j*i_max))]} -eq 0 ]; then n_flashes=$((n_flashes+1)) flashes[$((i+j*i_max))]=1 for i_2 in $(seq $((i-1)) $((i+1))); do for j_2 in $(seq $((j-1)) $((j+1))); do if [ $i_2 -ge 0 ] && [ $j_2 -ge 0 ] && [ $i_2 -lt $i_max ] && [ $j_2 -lt $j_max ]; then octopi[$((i_2+j_2*i_max))]=$((octopi[i_2+j_2*i_max]+1)) check_flash $i_2 $j_2 fi done done fi } for step in $(seq 100); do for i in $(seq 0 $((i_max-1))); do for j in $(seq 0 $((j_max-1))); do octopi[$((i+j*i_max))]=$((octopi[i+j*i_max]+1)) flashes[$((i+j*i_max))]=0 done done for i in $(seq 0 $((i_max-1))); do for j in $(seq 0 $((j_max-1))); do check_flash $i $j done done for i in $(seq 0 $((i_max-1))); do for j in $(seq 0 $((j_max-1))); do if [ ${octopi[$((i+j*i_max))]} -gt 9 ]; then octopi[$((i+j*i_max))]=0 fi done done done echo $n_flashes