import sys from itertools import chain, cycle, permutations 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 permutations(range(5)))) def solve2(ns, phases): feedback = [0] iter_feed = iter(feedback) loop = cycle(compute(ns, chain([phase], iter_feed)) for phase in phases) try: for machine in loop: feedback.append(next(machine)) except StopIteration: return feedback[-1] print(max(solve2(ns, phases) for phases in permutations(range(5, 10))))