adventofcode/2020/08/main.py
2022-12-02 09:41:56 +01:00

48 lines
773 B
Python

import copy
with open("data.txt", "r", encoding="utf-8") as f:
prg = [x.rstrip().split(" ") for x in f]
def run(prg):
acc = 0
used_insts = set()
i = 0
l = len(prg)
while i not in used_insts and i < l:
used_insts.add(i)
inst, val = prg[i]
if inst == "nop":
pass
elif inst == "acc":
acc += int(val)
elif inst == "jmp":
i += int(val)
continue
i += 1
return acc, i >= l
# Part 1
acc, _ = run(prg)
print(f"1: Accumulator is {acc}.")
# Part 2
ok = False
i = 0
while not ok:
aprg = copy.deepcopy(prg)
for j in range(i, len(aprg) - 1):
if aprg[j][0] == "nop":
aprg[j][0] = "jmp"
break
elif aprg[j][0] == "jmp":
aprg[j][0] = "nop"
break
acc, ok = run(aprg)
i += 1
assert i <= len(aprg)
print(f"2: Accumulator is {acc}.")