Roderic Day vor 5 Jahren
Ursprung
Commit
ffb487b898
2 geänderte Dateien mit 40 neuen und 2 gelöschten Zeilen
  1. +5
    -2
      y2019/intcode.py
  2. +35
    -0
      y2019/p07.py

+ 5
- 2
y2019/intcode.py Datei anzeigen

import itertools
import re import re




yield pos + N yield pos + N




def compute(ns, inp):
def compute(ns, in_iter):
if isinstance(ns, str): if isinstance(ns, str):
ns = parse(ns) ns = parse(ns)
if isinstance(in_iter, int):
in_iter = itertools.cycle([in_iter])


pos = 0 pos = 0
consume = lambda n, writes='': get_parameters(ns, pos, modes, n, writes) consume = lambda n, writes='': get_parameters(ns, pos, modes, n, writes)


elif op == 3: elif op == 3:
a, pos = consume(1, 'a') a, pos = consume(1, 'a')
ns[a] = inp
ns[a] = next(in_iter)


elif op == 4: elif op == 4:
a, pos = consume(1) a, pos = consume(1)

+ 35
- 0
y2019/p07.py Datei anzeigen

import sys
import itertools
from intcode import compute


ns = sys.stdin.read()


def solve(ns, phases):
out = 0
for n in phases:
out = list(compute(ns, iter([n, out])))[-1]
return out

print(max(solve(ns, phases) for phases in itertools.permutations(range(5))))


def solve2(ns, phases):
feedback = []
iter_phases = iter(phases)
iter_feed = iter(feedback)
loop = itertools.cycle([
compute(ns, itertools.chain([next(iter_phases), 0], iter_feed)),
compute(ns, itertools.chain([next(iter_phases)], iter_feed)),
compute(ns, itertools.chain([next(iter_phases)], iter_feed)),
compute(ns, itertools.chain([next(iter_phases)], iter_feed)),
compute(ns, itertools.chain([next(iter_phases)], iter_feed)),
])
try:
for machine in loop:
feedback.append(next(machine))
except StopIteration:
return feedback[-1]

print(max(solve2(ns, phases) for phases in itertools.permutations(range(5, 10))))

Laden…
Abbrechen
Speichern