Day 23
This commit is contained in:
parent
1c2822d898
commit
4c77d7b901
55
2019/day23.py
Normal file
55
2019/day23.py
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
from queue import Empty, SimpleQueue
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
|
from intcode import Intcode
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
codes = Intcode.parse_file("day23.txt")
|
||||||
|
network = Network(50, codes)
|
||||||
|
for nic in network.nics:
|
||||||
|
thread = Thread(target=lambda: nic.run(), name=f"NIC {nic.address}")
|
||||||
|
thread.start()
|
||||||
|
|
||||||
|
|
||||||
|
class Network:
|
||||||
|
|
||||||
|
def __init__(self, size, codes):
|
||||||
|
self.nics = [NIC(address, self, codes) for address in range(size)]
|
||||||
|
|
||||||
|
def route(self, sender, dest, x, y):
|
||||||
|
if dest == 255:
|
||||||
|
print(f"Packet to 255: {x, y}.")
|
||||||
|
return
|
||||||
|
print(f"Send {x, y} from {sender} to {dest}")
|
||||||
|
self.nics[dest].inq.put(x)
|
||||||
|
self.nics[dest].inq.put(y)
|
||||||
|
|
||||||
|
|
||||||
|
class NIC(Intcode):
|
||||||
|
|
||||||
|
def __init__(self, address, network, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.address = address
|
||||||
|
self.network = network
|
||||||
|
self.inq = SimpleQueue()
|
||||||
|
self.inq.put(address)
|
||||||
|
self.outq = []
|
||||||
|
|
||||||
|
def input_data(self):
|
||||||
|
try:
|
||||||
|
data = self.inq.get(timeout=0.1)
|
||||||
|
except Empty:
|
||||||
|
data = -1
|
||||||
|
return data
|
||||||
|
|
||||||
|
def output_data(self, data):
|
||||||
|
self.outq.append(data)
|
||||||
|
if len(self.outq) == 3:
|
||||||
|
self.network.route(self.address, *self.outq)
|
||||||
|
self.outq = []
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in a new issue