#!/bin/bash # # ex1.bash: Advent2020 game, day 11/game 1. CMD=${0##*/} shopt -s extglob declare -a rowsstr rows seats control declare -i NCOLS NROWS SIZE declare zeroed function print_control() { local -i r c for ((r=0; r&2 done echo >&2 done echo >&2 } function print_seats() { local -i r c for ((r=0; r&2 done echo >&2 done echo >&2 } function run() { local -i c r i cell changed=1 #local -a control local -i loop=0 seated=0 read -ra seats <<< "${rows[*]}" #print_seats while ((changed > 0)); do changed=0 seated=0 read -ra control <<< "$zeroed" for ((r=0; r=0 && c1>=0)); do ((control[r1*NCOLS+c1]++)); #echo up >&2 ((seats[r1*NCOLS+c1] != 0)) && break ((r1--)) ((c1--)) done # diagonal up right r1=$((r-1)) c1=$((c+1)) while ((r1>=0 && c1=0)); do ((control[r1*NCOLS+c1]++)); ((seats[r1*NCOLS+c1] != 0)) && break ((r1++)) ((c1--)) done # diagonal down right r1=$((r+1)) c1=$((c+1)) while ((r1=0)); do ((control[r*NCOLS+c1]++)); ((seats[r*NCOLS+c1] != 0)) && break ((c1--)) done # line right c1=$((c+1)) while ((c1=0)); do ((control[r1*NCOLS+c]++)); ((seats[r1*NCOLS+c] != 0)) && break ((r1--)) done # column down r1=$((r+1)) while ((r1= 5 )); then ((++changed)) seats[cell]=1 fi esac #printf "r=%d c=%d cell=%d val=%s\n" "$r" "$c" "$cell" "${seats[cell]}" >&2 done #echo >&2 done for ((r=0; r