--- /dev/null
+#!/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