Split intcode-processor to it's own library, made day 2 work with it
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user