X-Git-Url: https://git.sommitrealweird.co.uk/advent-of-code-2020.git/blobdiff_plain/61a73a00535337fa5b2780440d643052877ca036..c526bc47733dd9abefd93635326c58344966878f:/day14/dockingdata.sh diff --git a/day14/dockingdata.sh b/day14/dockingdata.sh new file mode 100755 index 0000000..2cb150b --- /dev/null +++ b/day14/dockingdata.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +filename="${1:-p1_165.txt}" + +declare -A mem + +parse_line() { + line="$1" + key=${line% = *} + value=${line#* = } + + if [ $key == "mask" ]; then + mask_part1=${value//X/0} + mask_part2=${value//1/X} + mask_part2=${mask_part2//0/1} + mask_part2=${mask_part2//X/0} + else + # it's a memory instruction, yay + loc=${key%]} + loc=${loc#*[} + value=$((value | 2#$mask_part1)) + value=$(( ~ $value & (2**36)-1 )) + value=$((value | 2#$mask_part2)) + value=$(( ~ $value & (2**36)-1 )) + mem[$loc]=$value + fi +} + +exec 3<"$filename" +while read -u 3 line; do + parse_line "$line" +done + +total=0 +for key in ${!mem[@]}; do + total=$((total+${mem[$key]})) +done + +echo "Total: $total"