import re def decode(line): groups = re.compile(r"(?P\w\w\w) (?P[+|-]\d+)").search(line) return groups def run(dict): line = 0 acc = 0 while True: (x, y) = dict[line] if x == 'stop': return acc if x == 'nop': dict[line] = ('stop', y) line += 1 if x == 'acc': dict[line] = ('stop', y) acc += int(y) line += 1 if x == 'jmp': dict[line] = ('stop', y) line = line + int(y) if line > 632: return acc with open(r"C:\Users\Maya\Desktop\Uni\WS_2021\AoC\input08") as f: lines = f.readlines() memo = {} for n, line in enumerate(lines): memo[n] = decode(line).groups() (x, y) = memo[405] if memo[405] == ('nop', y): memo[405] = ('jmp', y) elif memo[405] == ('jmp', y): memo[405] = ('nop', y) print(run(memo)) for line in memo: for n, l in enumerate(lines): memo[n] = decode(l).groups() (a, b) = memo[line] if memo[line] == ('nop', b): memo[line] = ('jmp', b) elif memo[line] == ('jmp', b): memo[line] = ('nop', b) if run(memo) == 'here': print(line)