Redid day23 from scratch...
It's working but I'm not happy about it yet.
This commit is contained in:
@@ -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() {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user