X-Git-Url: https://git.sommitrealweird.co.uk/advent-of-code-2021.git/blobdiff_plain/f9e8b7ad8be1935e1e09173294496d83b196387f..f1b1e23447bb6afd95256acfa9288a8b2680b8ee:/day14/poly.sh diff --git a/day14/poly.sh b/day14/poly.sh new file mode 100755 index 0000000..b617a80 --- /dev/null +++ b/day14/poly.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +set -u + +filename="${1:-example.txt}" +exec 3<"$filename" + +read -u 3 template + +read -u 3 blank + +declare -A inserts=() + +declare -a results=($template) + +while read -u 3 poly; do + left="${poly% -> *}" + right="${poly#* -> }" + inserts[$left]="$right" +done + +for (( a=1; a<=10; a++ )); do + cur_string="${results[$(($a-1))]}" + for (( b=0; b<$((${#cur_string} - 1)); b++ )); do + lookup="${cur_string:$b:2}" + if [ $b -eq 0 ]; then + results[$a]="${lookup:0:1}${inserts[$lookup]}" + else + results[$a]+="${lookup:0:1}${inserts[$lookup]}" + fi + done + results[$a]+="${cur_string: -1:1}" +done + +declare -A counts + +do_counts() { + local string="$1" + counts=() + + for (( a=0; a<${#string}; a++ )); do + char=${string:$a:1} + if [ "${counts[$char]+abc}" ]; then + ((counts[$char]+=1)) + else + counts[$char]=1 + fi + done +} + +get_highest_lowest() { + local -n __results="$1" + lowest_count=-1 + lowest_letter="" + highest_count=-1 + highest_letter="" + for key in "${!counts[@]}"; do + if [ $lowest_count -eq -1 ]; then + lowest_count=${counts[$key]} + lowest_letter=$key + elif [ ${counts[$key]} -lt $lowest_count ]; then + lowest_count=${counts[$key]} + lowest_letter=$key + fi + if [ $highest_count -eq -1 ]; then + highest_count=${counts[$key]} + highest_letter=$key + elif [ ${counts[$key]} -gt $highest_count ]; then + highest_count=${counts[$key]} + highest_letter=$key + fi + done + + __results[$lowest_count]=$lowest_letter + __results[$highest_count]=$highest_letter +} + +do_counts "${results[-1]}" +declare -a result_counts=() +get_highest_lowest result_counts + +declare -a temp=( "${!result_counts[@]}" ) +echo -n "Part 1: Difference between highest and lowest count: " +echo $(("${temp[1]}" - "${temp[0]}"))