Files
advent-of-code/day04/ex1.bash

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