52 lines
981 B
Bash
Executable File
52 lines
981 B
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# ex1.bash: Advent2020 game, day 4/game 1.
|
|
|
|
CMD=${0##*/}
|
|
shopt -s extglob
|
|
|
|
declare -A KEYS
|
|
KEYS=( ["byr"]="" ["iyr"]="" ["eyr"]="" ["hgt"]="" ["hcl"]="" ["ecl"]=""
|
|
["pid"]="" ["cid"]="" )
|
|
|
|
function reset_array() { # reset array values
|
|
local -n array=${1}
|
|
local key
|
|
|
|
#echo before reset: ${KEYS[@]}
|
|
for key in "${!array[@]}"; do
|
|
array[$key]=""
|
|
done
|
|
#echo after reset: ${KEYS[@]}
|
|
}
|
|
|
|
function passport_valid() {
|
|
local -i ret=0
|
|
|
|
for key in "${!KEYS[@]}"; do
|
|
[[ $key != "cid" ]] && [[ -z ${KEYS[$key]} ]] && ret=1 && break
|
|
done
|
|
return $ret
|
|
}
|
|
|
|
declare -i current=0 nvalids=0
|
|
|
|
while read -r line; do
|
|
if [[ -z "$line" ]]; then
|
|
((current++))
|
|
passport_valid && ((nvalids ++))
|
|
reset_array KEYS
|
|
continue
|
|
fi
|
|
for pair in $line; do
|
|
key=${pair%%:*}
|
|
val=${pair##*:}
|
|
[[ -v KEYS[$key] ]] && KEYS[$key]="$val" # valid key
|
|
done
|
|
done
|
|
((current++))
|
|
passport_valid && ((nvalids ++))
|
|
printf "%s : valid=%d/%d\n" "$CMD" "$nvalids" "$current"
|
|
|
|
exit 0
|