Rename days to 2 digits always
[advent-of-code-2019.git] / day08 / parse_image.sh
diff --git a/day08/parse_image.sh b/day08/parse_image.sh
new file mode 100644 (file)
index 0000000..638694a
--- /dev/null
@@ -0,0 +1,76 @@
+#!/bin/bash
+
+exec 3<input.txt
+
+declare -a layers
+
+image_width=25
+image_height=6
+
+layer_number=1
+while read -u 3 -N $((image_width*$image_height)) layer; do
+    layers[$layer_number]=$layer
+    layer_number=$((layer_number+1))
+done
+
+echo "Got $layer_number layers"
+
+get_count() {
+    digit=$1
+    data=$2
+
+    countstring="$(echo -n "$data" | sed -e 's#[^'$digit']##g;')"
+    count=${#countstring}
+
+    echo $count
+}
+
+zero_count_layer=0
+lowest_zero_count=-1
+for layer_number in ${!layers[@]}; do
+    count=$(get_count 0 ${layers[$layer_number]})
+    if [ $count -lt $lowest_zero_count ] || [ $lowest_zero_count -eq -1 ]; then
+        lowest_zero_count=$count
+        zero_count_layer=$layer_number
+    fi
+done
+
+one_count=$(get_count 1 ${layers[$zero_count_layer]})
+two_count=$(get_count 2 ${layers[$zero_count_layer]})
+
+echo "Layer $zero_count_layer has the fewest zeros ($lowest_zero_count)"
+echo "Answer of number of 1s * number of 2s: $one_count * $two_count = $((one_count * two_count))"
+
+draw_image() {
+    image=""
+    for (( y=0; y<$image_height; y++ )); do
+        offset=$(($image_width*$y))
+        for (( x=0; x<$image_width; x++ )); do
+            for (( layer=1; layer<=$layer_number; layer++ )); do
+                data=${layers[$layer]}
+                case ${data:$((offset+x)):1} in
+                    0)
+                        image+=" "
+                        continue 2
+                        ;;
+                    1)
+                        image+="#"
+                        continue 2
+                        ;;
+                esac
+            done
+            image+="."
+        done
+    done
+
+    printf "=%.0s" {0..26}
+    echo
+    for (( y=0; y<$image_height; y++ )); do
+        offset=$(($image_width*$y))
+        echo "|${image:$offset:25}|"
+    done
+    printf "=%.0s" {0..26}
+    echo
+}
+
+draw_image