Fixes / changes to re-run against the google login data
[advent-of-code-2019.git] / day02 / computer.sh
1 #!/bin/bash
2
3 filename=${1:-input.txt}
4
5 exec 3<"$filename"
6
7 OLDIFS=$IFS
8 IFS="," read -u 3 -a orig_data
9 IFS=$OLDIFS
10
11 run_program() {
12     noun=$1
13     verb=$2
14     data=("${orig_data[@]}")
15     data[1]=$noun
16     data[2]=$verb
17     pos=0
18     while [ $pos -le ${#data[@]} ]; do
19         loc1=${data[$((pos+1))]}
20         loc2=${data[$((pos+2))]}
21         res_loc=${data[$((pos+3))]}
22         case ${data[$pos]} in
23             1)
24                 data[$res_loc]=$((${data[$loc1]}+${data[$loc2]}))
25                 ;;
26             2)
27                 data[$res_loc]=$((${data[$loc1]}*${data[$loc2]}))
28                 ;;
29             99)
30                 break
31                 ;;
32             *)
33                 echo "Invalid opcode: ${data[$pos]} at position $pos"
34                 exit 1
35         esac
36         pos=$((pos+4))
37     done
38
39     echo "${data[0]}"
40 }
41
42 echo "Part 1: $(run_program 12 2)"
43
44 desired_output=19690720
45
46 for (( noun=0; noun < 100; noun++)); do
47     for (( verb=0; verb < 100; verb++)); do
48         if [ $(run_program $noun $verb) -eq $desired_output ]; then
49             echo "Part 2: $((noun * 100 + $verb)) $noun, $verb"
50             exit 0
51         fi
52     done
53 done