#!/bin/bash # # ex2.bash: Advent2020 game, day 16/game 2. CMD=${0##*/} shopt -s extglob declare -a valid=() myticket=() keys=() values=() match=() declare -A position=() declare -i state=0 res=1 curkey=0 curticket=0 while read -r line; do if [[ $line =~ ^([a-z ]+)\:\ ([0-9]+)-([0-9]+)([a-z ]+)([0-9]+)-([0-9]+)$ ]]; then # valid ranges keys[$curkey]="${BASH_REMATCH[1]}" n1=$(seq -s" " "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}") n2=$(seq -s" " "${BASH_REMATCH[5]}" "${BASH_REMATCH[6]}") for i in $n1 $n2; do valid[$i]=1 done values[$curkey]="${n1[*]} ${n2[*]}" ((curkey++)) elif [[ $line =~ (your ticket:|nearby tickets) ]]; then # next section ((state++)) elif [[ $line =~ [0-9,]+ ]]; then # shellcheck disable=SC2206 numbers=( ${line//,/ } ) case $state in 1) # my ticket # shellcheck disable=SC2206 myticket=( ${numbers[@]} ) # initialize possible matches array: all for ((i=0; i