from math import factorial def solve(data, part_2=False): REGS = "abcd" regs = {c: 0 for c in REGS} if part_2: print(factorial(12) + (91 * 85)) return else: regs["a"] = 7 insts = data.splitlines() i = 0 inst_count = 0 while i < len(insts): inst_count += 1 # print(i, regs) parts = insts[i].split() cmd = parts[0] if cmd == "cpy": if parts[1] in REGS: regs[parts[2]] = regs[parts[1]] else: regs[parts[2]] = int(parts[1]) elif cmd == "jnz": val = 0 if parts[1] in REGS: val = regs[parts[1]] else: val = int(parts[1]) if val != 0: if parts[2] in REGS: i += regs[parts[2]] else: i += int(parts[2]) continue elif cmd == "inc": if insts[i + 1] == "dec d" and insts[i + 2] == "jnz d -2": regs[parts[1]] += regs["d"] regs["d"] = 0 i += 3 continue regs[parts[1]] += 1 elif cmd == "dec": regs[parts[1]] -= 1 elif cmd == "tgl": off = 0 if parts[1] in REGS: off = regs[parts[1]] else: off = int(parts[1]) addr = i + off if addr < len(insts): parts = insts[addr].split() if len(parts) == 2: if parts[0] == "inc": parts[0] = "dec" else: parts[0] = "inc" insts[addr] = " ".join(parts) elif len(parts) == 3: if parts[0] == "jnz": parts[0] = "cpy" else: parts[0] = "jnz" insts[addr] = " ".join(parts) else: assert False else: assert False i += 1 print(regs["a"]) def main(): data = open(0).read().strip() solve(data) solve(data, True) if __name__ == "__main__": main()