|
|
|
|
|
|
|
|
|
|
|
import re |
|
|
|
|
|
import sys |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def run(text): |
|
|
|
|
|
acc = 0 |
|
|
|
|
|
pos = 0 |
|
|
|
|
|
seen = set() |
|
|
|
|
|
instructions = text.splitlines() |
|
|
|
|
|
while pos not in seen: |
|
|
|
|
|
seen.add(pos) |
|
|
|
|
|
inst, n = instructions[pos].split() |
|
|
|
|
|
if inst == 'acc': |
|
|
|
|
|
acc += int(n) |
|
|
|
|
|
pos += 1 |
|
|
|
|
|
elif inst == 'jmp': |
|
|
|
|
|
pos += int(n) |
|
|
|
|
|
elif inst == 'nop': |
|
|
|
|
|
pos += 1 |
|
|
|
|
|
|
|
|
|
|
|
if pos == len(instructions): |
|
|
|
|
|
raise RuntimeError(acc) |
|
|
|
|
|
|
|
|
|
|
|
return acc |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
text = sys.stdin.read() |
|
|
|
|
|
print(run(text)) |
|
|
|
|
|
for match in re.finditer(r'(jmp|nop)', text): |
|
|
|
|
|
seen, (a, b) = match.group(0), match.span() |
|
|
|
|
|
pair, = {'jmp', 'nop'} - {seen} |
|
|
|
|
|
var = text[:a] + pair + text[b:] |
|
|
|
|
|
try: |
|
|
|
|
|
run(var) |
|
|
|
|
|
except RuntimeError as error: |
|
|
|
|
|
print(error) |