161 lines
2.6 KiB
Python
161 lines
2.6 KiB
Python
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)
|