#!/usr/bin/env bash set -e; cd "$(dirname "$0")"; run_comp() { IFS="," read -r -a ops < ./input; i=0; ops[1]=$1; ops[2]=$2; while true; do op="${ops[i]}"; case "$op" in 1|2) inputa="${ops[i+1]}"; inputb="${ops[i+2]}"; output="${ops[i+3]}"; i=$((i + 4)); a="${ops[inputa]}" b="${ops[inputb]}" if [ "$op" -eq "1" ]; then x=$((a + b)); else x=$((a * b)); fi ops[output]=$x; ;; 99) break; ;; *) echo "Invalid op: $op"; exit 1; ;; esac done echo "${ops[0]}"; } echo "part 1: "; run_comp 12 2; echo; echo "part 2: "; for noun in $(seq 1 99); do for verb in $(seq 1 99); do if [ "$(run_comp $noun $verb)" -eq 19690720 ]; then echo "$((100 * noun + verb))"; exit; fi done; done;