Skip to content

Instantly share code, notes, and snippets.

@kung-foo
Created December 8, 2020 07:35
Show Gist options
  • Save kung-foo/c7cd7f6d0fe1ef3bcd83c22d528324c8 to your computer and use it in GitHub Desktop.
Save kung-foo/c7cd7f6d0fe1ef3bcd83c22d528324c8 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import os
import sys
import random
src = open("input.txt", "r").readlines()
src2 = """nop +0
acc +1
jmp +4
acc +3
jmp -3
acc -99
acc +1
jmp -4
acc +6""".splitlines()
src = [r.strip() for r in src]
def run(patch_addr):
acc = 0
eip = 0
prog = []
for line in src:
t = line.split(" ")
prog.append([t[0], int(t[1])])
patch_inst = prog[patch_addr][0]
if patch_inst == "jmp":
prog[patch_addr][0] = "nop"
if patch_inst == "nop":
prog[patch_addr][0] = "jmp"
visited = set()
while True:
if eip >= len(prog):
print("overflow!")
break
inst = prog[eip][0]
p1 = prog[eip][1]
# print(f"eip={eip} acc={acc} inst={inst} p1={p1}")
if eip in visited:
print("loop")
break
visited.add(eip)
if inst == "nop":
eip += 1
continue
if inst == "acc":
acc += p1
eip += 1
continue
if inst == "jmp":
eip += p1
continue
return acc
for x in range(len(src)):
print(x, run(x))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment