Roderic Day 5 lat temu
rodzic
commit
c6e1e03507
2 zmienionych plików z 47 dodań i 1 usunięć
  1. +1
    -1
      makefile
  2. +46
    -0
      y2019/p23.py

+ 1
- 1
makefile Wyświetl plik

@@ -9,7 +9,7 @@ main: venv/

venv/: requirements.txt
rm -rf venv/
python3 -m venv venv
~/.pyenv/versions/3.8.0/bin/python -m venv venv
venv/bin/pip install -r requirements.txt
touch requirements.txt venv/
# install flake8 git hook

+ 46
- 0
y2019/p23.py Wyświetl plik

@@ -0,0 +1,46 @@
import collections
import sys
import threading

from intcode import compute


def communicate(n):
yield n
while True:
while queues[n]:
yield queues[n].popleft()
yield -1


def handle(n):
bot = compute(text, communicate(n))
for addr, X, Y in zip(bot, bot, bot):
if addr == 255:
NAT.append((X, Y))
else:
queues[addr].extend((X, Y))


text = sys.stdin.read()

queues = collections.defaultdict(collections.deque)
NAT = []
for n in range(50):
threading.Thread(target=handle, args=[n], daemon=True).start()

seen = set()
while True:
activity = sum(len(q) for q in queues.values())
if not activity and len(NAT):
X, Y = NAT[-1]

if len(NAT) == 1:
print(Y)

if Y in seen:
print(Y)
break

queues[0] += [X, Y]
seen.add(Y)

Ładowanie…
Anuluj
Zapisz