|
@@ -0,0 +1,44 @@
|
|
|
+# 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))
|