Move to have day be 2 digit always
[advent-of-code-2020.git] / day04 / count_valid_passports.sh
diff --git a/day04/count_valid_passports.sh b/day04/count_valid_passports.sh
new file mode 100644 (file)
index 0000000..4a447ee
--- /dev/null
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+declare -a data
+cur_data=""
+seperator=""
+valid_count=0
+
+required_fields=(byr iyr eyr hgt hcl ecl pid)
+exec 3<input.txt
+
+while read -u 3 line; do
+    if [ "$line" = "" ]; then
+        data+=("$cur_data")
+        seperator=""
+        cur_data=""
+        continue
+    fi
+    cur_data="${cur_data}${seperator}$line"
+    seperator=" "
+done
+
+# on the last line, if cur_data isn't empty, add that to the array
+if [ "$cur_data" != "" ]; then
+    data+=("$cur_data")
+fi
+
+verify_data() {
+    local -n record=$1
+
+    for field in ${required_fields[@]}; do
+        if ! [ ${kvp[$field]+a} ]; then
+            exit 1
+        fi
+    done
+
+    exit 0
+}
+
+for (( i=0; i<${#data[@]}; i++ )); do
+    record="${data[$i]}"
+    declare -A kvp
+    for field in $record; do
+        key=${field%:*}
+        value=${field#*:}
+        kvp[$key]=$value
+    done
+    if ( verify_data kvp ); then
+        valid_count=$((valid_count+1))
+    fi
+    unset kvp
+done
+
+echo "$valid_count valid entries"