There's room to optimize part 2, but I wanted to commit my original brute-force solution first.
48 lines
1.0 KiB
Go
48 lines
1.0 KiB
Go
package utilities
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func ParseIntcodeProgram(programStr string) []int64 {
|
|
nums := strings.Split(programStr, ",")
|
|
program := make([]int64, len(nums))
|
|
for idx, num := range nums {
|
|
iNum, err := strconv.ParseInt(num, 10, 64)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
program[idx] = iNum
|
|
}
|
|
|
|
return program
|
|
}
|
|
|
|
func RunIntcodeProgram(program []int64) {
|
|
for instructionPointer := 0; instructionPointer < len(program); {
|
|
opcode := program[instructionPointer]
|
|
switch opcode {
|
|
case 1:
|
|
param1 := program[instructionPointer+1]
|
|
param2 := program[instructionPointer+2]
|
|
param3 := program[instructionPointer+3]
|
|
program[param3] = program[param1] + program[param2]
|
|
|
|
instructionPointer += 4
|
|
break
|
|
case 2:
|
|
param1 := program[instructionPointer+1]
|
|
param2 := program[instructionPointer+2]
|
|
param3 := program[instructionPointer+3]
|
|
program[param3] = program[param1] * program[param2]
|
|
|
|
instructionPointer += 4
|
|
break
|
|
case 99:
|
|
instructionPointer = len(program)
|
|
break
|
|
}
|
|
}
|
|
}
|