from lib import get_data, ints from d9 import Amp from itertools import combinations data = get_data(__file__) xs = ints(data) commands = [ "north", "take candy cane", "west", "south", "south", "take fuel cell", "south", "take manifold", "north", "north", "west", "take mutex", "north", "south", "south", "south", "take coin", "south", "north", "east", "take cake", "west", "east", "north", "south", "west", "east", "east", "north", "south", "west", "north", "west", "east", "west", "south", "west", "north", "north", "south", "west", "north", "east", "south", "west", "east", "west", "south", "west", "take dehydrated water", "west", "east", "west", "south", "take prime number", "south", "north", "east", "east", "west", "north", "east", "east", "north", "south", "west", "north", "west", "south", "inv", "west", ] items = [ "cake", "prime number", "mutex", "dehydrated water", "coin", "manifold", "candy cane", "fuel cell", ] def run_command(a, s): for c in s: a.feed(ord(c)) a.feed(10) a.go() a = Amp(xs) for c in commands: a.go() while a.outputs: a.go() a.pop() # print(chr(a.pop()), end="") run_command(a, c) a.go() def try_all(a): subsets = [list(combinations(items, r)) for r in range(1, len(items) + 1)] subsets = [item for sublist in subsets for item in sublist] for subset in subsets: for item in items: c = f"drop {item}" run_command(a, c) a.go() while a.outputs: a.pop() a.go() for item in subset: c = f"take {item}" run_command(a, c) a.go() while a.outputs: a.pop() a.go() run_command(a, "west") output_str = "" while a.outputs: a.go() output_str += chr(a.pop()) if "lighter" in output_str: pass elif "heavier" in output_str: pass else: (password,) = ints(output_str) print(password) exit() while True: a.go() output_str = "" while a.outputs: a.go() output_str += chr(a.pop()) try_all(a) if a.input_required: c = input(">") run_command(a, c)