Super-Optimized 2019 Day 2
This commit is contained in:
@@ -18,7 +18,6 @@ func main() {
|
||||
for _, v := range strings.FieldsFunc(inp, f) {
|
||||
prog = append(prog, Atoi(v))
|
||||
}
|
||||
//part1(prog)
|
||||
part2(prog)
|
||||
}
|
||||
|
||||
@@ -36,6 +35,31 @@ func part1(prog []int) {
|
||||
}
|
||||
}
|
||||
|
||||
func part2(prog []int) {
|
||||
runProg := func(n, v int, prog []int) int {
|
||||
progcpy := make([]int, len(prog))
|
||||
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]
|
||||
}
|
||||
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)
|
||||
}
|
||||
|
||||
func slowestPart2(prog []int) {
|
||||
for n := 0; n <= 99; n++ {
|
||||
for v := 0; v <= 99; v++ {
|
||||
@@ -108,16 +132,6 @@ func slowPart2(prog []int) {
|
||||
}
|
||||
}
|
||||
|
||||
func part2(prog []int) {
|
||||
target := 19690720
|
||||
zeroVal := 610685
|
||||
n := (target - zeroVal) / 360000
|
||||
target = target % 1000
|
||||
zeroVal = zeroVal % 1000
|
||||
v := target - zeroVal
|
||||
fmt.Println("Answer:", (100*n + v))
|
||||
}
|
||||
|
||||
func printState(prog []int) {
|
||||
fmt.Println(prog)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user