Finish 2016.
This commit is contained in:
60
2016/d25.py
Normal file
60
2016/d25.py
Normal file
@@ -0,0 +1,60 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user