instructions = [] with open('input.txt') as fh: for line in fh: cmd, k = line.strip().split(' ', 1) instructions.append((cmd, int(k))) def exec_until_loop(): value = 0 i = 0 visited = set() while i not in visited: visited.add(i) cmd, k = instructions[i] if cmd == 'nop': i += 1 elif cmd == 'jmp': i += k else: value += k i += 1 return value def _exec_fixed(invert): value = 0 i = 0 visited = set() while True: visited.add(i) cmd, k = instructions[i] if cmd == 'nop': if i == invert: i += k else: i += 1 elif cmd == 'jmp': if i == invert: i += 1 else: i += k else: value += k i += 1 if i == len(instructions): return value elif i in visited or i > len(instructions): raise ValueError def exec_fixed(): for i in range(len(instructions)): if instructions[i][0] in ['nop', 'jmp']: try: return _exec_fixed(i) except ValueError: pass print(exec_until_loop()) print(exec_fixed())