33 lines
792 B
Python
33 lines
792 B
Python
|
|
with open('input') as f:
|
|
code = {i: tuple(line.split(" ")) for i, line in enumerate(f.read().strip().split("\n"))}
|
|
|
|
def run(code):
|
|
try:
|
|
acc = 0
|
|
pc = 0
|
|
while True:
|
|
op, value = code[pc]
|
|
del code[pc]
|
|
if op == 'acc':
|
|
acc += int(value)
|
|
pc += 1
|
|
if op == 'nop':
|
|
pc += 1
|
|
if op == 'jmp':
|
|
pc += int(value)
|
|
except KeyError as e:
|
|
return pc, acc
|
|
|
|
print(run(code.copy())[1])
|
|
|
|
m = max(code)
|
|
for i in code:
|
|
if code[i][0] in ["nop", "jmp"]:
|
|
new_code = code.copy()
|
|
op, value = code[i]
|
|
new_code[i] = ("nop" if op=="jmp" else "jmp", value)
|
|
pc, acc = run(new_code)
|
|
if pc==m+1:
|
|
print(acc)
|