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))))