Split intcode-processor to it's own library, made day 2 work with it

This commit is contained in:
2019-12-04 14:07:27 -06:00
parent 6c4a6187ff
commit bbfcc6022d
8 changed files with 264 additions and 261 deletions

View File

@@ -3,7 +3,7 @@ package main
import (
"bufio"
"fmt"
"git.bullercodeworks.com/brian/adventofcode/intcode-processor"
intcode "git.bullercodeworks.com/brian/adventofcode/2019/intcode-processor"
"log"
"os"
"strconv"
@@ -12,31 +12,21 @@ import (
func main() {
inp := StdinToString()
i := intcode.Program
f := func(c rune) bool {
return c == ','
}
var prog []int
for _, v := range strings.FieldsFunc(inp, f) {
for _, v := range strings.Split(inp, ",") {
prog = append(prog, Atoi(v))
}
i := intcode.NewProgram(prog)
i.PrintCode()
//part2(prog)
part1(prog)
part2(prog)
}
func part1(prog []int) {
for i := 0; i < len(prog); i += 4 {
switch prog[i] {
case 1:
prog[prog[i+3]] = add(prog[i+1], prog[i+2], prog)
case 2:
prog[prog[i+3]] = mult(prog[i+1], prog[i+2], prog)
case 99:
printState(prog)
os.Exit(0)
}
p := intcode.NewProgram(prog)
p.Run()
if p.State() == intcode.RET_ERR {
fmt.Println(p.Error())
}
fmt.Println("Part 1:", p.GetProgramValueAt(0))
}
func part2(prog []int) {
@@ -45,23 +35,15 @@ func part2(prog []int) {
copy(progcpy, prog)
progcpy[1] = n
progcpy[2] = v
for i := 0; i < len(progcpy); i += 4 {
switch progcpy[i] {
case 1:
progcpy[progcpy[i+3]] = add(progcpy[i+1], progcpy[i+2], progcpy)
case 2:
progcpy[progcpy[i+3]] = mult(progcpy[i+1], progcpy[i+2], progcpy)
case 99:
i = len(progcpy)
}
}
return progcpy[0]
p := intcode.NewProgram(progcpy)
p.Run()
return p.GetProgramValueAt(0)
}
target := 19690720
zeroVal := runProg(0, 0, prog)
nDiff := runProg(1, 0, prog) - zeroVal
vDiff := runProg(0, 1, prog) - zeroVal
fmt.Println(((target - zeroVal) / nDiff), ((target%nDiff)-(zeroVal%nDiff))/vDiff)
fmt.Println("Part 2:", ((target - zeroVal) / nDiff), ((target%nDiff)-(zeroVal%nDiff))/vDiff)
}
func slowestPart2(prog []int) {