61 lines
1.6 KiB
Python
61 lines
1.6 KiB
Python
def solve(data):
|
|
REGS = "abcd"
|
|
goal = [0, 1, 0, 1, 0, 1, 0, 1]
|
|
|
|
for a in range(0, 1000):
|
|
insts = data.splitlines()
|
|
regs = {c: 0 for c in REGS}
|
|
regs["a"] = a
|
|
outs = []
|
|
i = 0
|
|
inst_count = 0
|
|
while i < len(insts):
|
|
inst_count += 1
|
|
if inst_count > 100_000:
|
|
break
|
|
parts = insts[i].split()
|
|
cmd = parts[0]
|
|
if cmd == "cpy":
|
|
if parts[1] in "abcd":
|
|
regs[parts[2]] = regs[parts[1]]
|
|
else:
|
|
regs[parts[2]] = int(parts[1])
|
|
elif cmd == "out":
|
|
if parts[1] in "abcd":
|
|
v = regs[parts[1]]
|
|
else:
|
|
v = int(parts[1])
|
|
outs.append(v)
|
|
if len(outs) == len(goal):
|
|
if outs == goal:
|
|
print(a)
|
|
return
|
|
else:
|
|
# print(outs)
|
|
pass
|
|
elif cmd == "jnz":
|
|
val = 0
|
|
if parts[1] in "abcd":
|
|
val = regs[parts[1]]
|
|
else:
|
|
val = int(parts[1])
|
|
if val != 0:
|
|
i += int(parts[2])
|
|
continue
|
|
elif cmd == "inc":
|
|
regs[parts[1]] += 1
|
|
elif cmd == "dec":
|
|
regs[parts[1]] -= 1
|
|
else:
|
|
assert False
|
|
i += 1
|
|
|
|
|
|
def main():
|
|
data = open(0).read().strip()
|
|
solve(data)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|