-#!/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