Files
aocpy/2016/d25.py
2024-05-20 20:00:34 -04:00

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