1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- # Read lines
- instructions = []
- with open("8.input") as f:
- for line in f.readlines():
- line = line.strip()
- (instr, arg) = line.split(" ")
- instructions.append((instr, int(arg.replace("+", ""))))
- def run(program):
- pc = 0
- acc = 0
- visited = set()
- while pc not in visited:
- try:
- (instr, arg) = program[pc]
- except IndexError:
- break
- if instr == "nop":
- pass
- elif instr == "acc":
- acc += arg
- elif instr == "jmp":
- pc += arg - 1
- visited.add(pc)
- pc += 1
- return (pc, acc)
- (_, acc) = run(instructions)
- print("Answer 1: " + str(acc))
- for (i, (instr, arg)) in enumerate(instructions):
- if instr == "jmp" or instr == "nop":
- program = list(instructions)
- if instr == "nop":
- program[i] = ("jmp", arg)
- else:
- program[i] = ("nop", arg)
- (pc, acc) = run(program)
- if pc == len(program):
- print("Answer 2: " + str(acc))
|