From e8d8ecd46860eb812f0d991cc676fa73584f8975 Mon Sep 17 00:00:00 2001 From: Pierre Jeanjean Date: Sat, 11 Dec 2021 15:32:18 +0100 Subject: [PATCH] Day 11 --- 11/01.sh | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 11/02.sh | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100755 11/01.sh create mode 100755 11/02.sh diff --git a/11/01.sh b/11/01.sh new file mode 100755 index 0000000..c024734 --- /dev/null +++ b/11/01.sh @@ -0,0 +1,61 @@ +#!/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 diff --git a/11/02.sh b/11/02.sh new file mode 100755 index 0000000..9df1d79 --- /dev/null +++ b/11/02.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +i_max=-1 +j_max=0 +octopi=() +flashes=() +n_flashes=0 +step=1 +found_step=-1 +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 +} + +while [ $found_step -eq -1 ]; do + n_flashes=0 + 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 + if [ $n_flashes -eq $((i_max*j_max)) ]; then + found_step=$step + fi + step=$((step+1)) +done +echo $found_step