from lib import get_data, str_to_ints import d16 def run(data, break_after=None, reg_zero_init=0): ip = None regs = [0 for _ in range(6)] regs[0] = reg_zero_init insts = [] for line in data.splitlines(): if line.startswith("#"): (ip,) = str_to_ints(line) else: fs = line.split() vals = str_to_ints(line) insts.append([fs[0]] + vals) count = 0 assert ip is not None seen = set() last_added = None while regs[ip] < len(insts): if break_after is not None and count > break_after: break if regs[ip] == 28: r4 = regs[4] if len(seen) == 0: print(r4) if r4 in seen: print(last_added) break else: seen.add(r4) last_added = r4 inst = insts[regs[ip]] f = getattr(d16, inst[0]) f(regs, *inst[1:]) regs[ip] += 1 count += 1 def main(): data = get_data(__file__) run(data, reg_zero_init=333) if __name__ == "__main__": main()