instructions = [l.split(" ") for l in open("input_modified", "r").read().split("\n") if l] instructions = [(operation, int(argument)) for (operation, argument) in instructions] pc = 0 ac = 0 operations = {} def operation(op): def wrap(func): operations[op] = func return wrap @operation("acc") def acc(p): global pc global ac ac += p pc += 1 @operation("jmp") def jmp(p): global pc pc += p @operation("nop") def nop(p): global pc if(pc + p > len(instructions)): print(pc, "NOP COULD END") pc += 1 while pc < len(instructions): (opcode, p) = instructions[pc] print(pc, ac, opcode, p) op = operations[opcode] op(p) print(ac)