Redid day23 from scratch...

It's working but I'm not happy about it yet.
This commit is contained in:
2020-11-04 09:50:08 -06:00
parent f6e0792525
commit 08cb79c5cb
5 changed files with 302 additions and 160 deletions

View File

@@ -1,78 +1,54 @@
package main
import (
"time"
"fmt"
intcode "git.bullercodeworks.com/brian/adventofcode/2019/intcode-processor"
h "git.bullercodeworks.com/brian/adventofcode/helpers"
)
func main() {
//pt := helpers.GetArgNumber(1)
prog := intcode.ReadIntCodeFile("input")
//if pt == "1" {
part1(prog)
//} else {
// part2(prog)
//}
}
func part1(prog []int) {
p := intcode.NewProgram(prog)
n := StartNetwork(*p)
for !n.CrashOverride {
time.Sleep(1)
pt := h.GetArgNumber(1)
if pt != "2" {
part1()
} else {
part2()
}
}
/*
func part1o(prog []int) {
var network []*intcode.Program
msgQueue := make([][]int, 255)
for k := 0; k < 50; k++ {
p := intcode.NewProgram(prog)
//p.EnableDebug()
network = append(network, p)
msgQueue = append(msgQueue, []int{})
go func(addr int) {
for !network[addr].NeedsInput() {
time.Sleep(1)
func part1() {
devices, queue := NewNetwork()
for {
//fmt.Print(h.CLEAR_SCREEN)
for i, dev := range devices {
var packet h.Coordinate
if len(queue[i]) > 0 {
packet = queue[i][0]
} else {
packet = h.Coordinate{X: -1, Y: -1}
}
network[addr].Input(addr)
for {
if !network[addr].NeedsOutput() && !network[addr].NeedsInput() {
time.Sleep(1)
} else if network[addr].NeedsOutput() {
msgD := network[addr].Output()
msgQueue[msgD] = append(msgQueue[msgD], network[addr].Output())
msgQueue[msgD] = append(msgQueue[msgD], network[addr].Output())
fmt.Println(addr, "->", msgD, msgQueue[msgD])
} else if network[addr].NeedsInput() {
if len(msgQueue[addr]) > 0 {
var v int
v, msgQueue[addr] = msgQueue[addr][0], msgQueue[addr][1:]
fmt.Println(addr, "<-", v)
network[addr].Input(v)
} else {
network[addr].Input(-1)
}
select {
case dest := <-dev.Channel:
x := <-dev.Channel
y := <-dev.Channel
//fmt.Printf("%s: [%d] -> [%d]: {%d, %d}\n", time.Now().Format(time.Stamp), i, dest, x, y)
if dest == 255 {
fmt.Println(y)
return
}
queue[dest] = append(queue[dest], h.Coordinate{X: x, Y: y})
case dev.Channel <- packet.X:
//if packet.X != -1 && packet.Y != -1 {
// fmt.Printf("%s: [%d] <-: {%d, %d}\n", time.Now().Format(time.Stamp), i, packet.X, packet.Y)
//}
if packet.X != -1 {
dev.Channel <- packet.Y
queue[i] = queue[i][1:]
}
}
}(k)
go network[k].Run()
//fmt.Println(dev)
}
}
for len(msgQueue[255]) < 2 {
time.Sleep(1)
}
fmt.Println(msgQueue[255])
}
*/
func part2(prog []int) {
}
func getOutput(p *intcode.Program) int {
for !p.NeedsOutput() {
time.Sleep(1)
}
return p.Output()
func part2() {
}