62 lines
1.3 KiB
Bash
Executable File
62 lines
1.3 KiB
Bash
Executable File
#!/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
|