# -- Day 2: 1202 Program Alarm --- class VM: stack = None pointer = 0 def __init__(self, input, id, stdin, stdout): self.input = input self.id = id self.stdin = stdin self.stdout = stdout def write(self, idx, value): self.input[idx] = value def init(self): self.pointer = 0 self.stack = [(self.input[:], self.pointer)] def run(self): while len(self.stack) > 0: state, ptr = self.stack.pop() op = state[ptr] if op in [1, 2]: if op == 1: state[state[ptr+3]] = state[state[ptr+1]] + state[state[ptr+2]] elif op == 2: state[state[ptr+3]] = state[state[ptr+1]] * state[state[ptr+2]] self.stack.insert(0, (state, ptr+4)) else: return state[0] with open("input/02.txt", "r") as f: input = [int(x) for x in f.readlines()[0].strip().split(',')] vm = VM(input[:], "a", [], []) vm.write(1, 12) vm.write(2, 2) vm.init() r = vm.run() print(r) # 8017076 noun, verb = 0, 0 def lt(x, y): if x is None: return True return x < y while lt(vm.run(), 19690720): noun += 1 vm.write(1, noun) vm.write(2, verb) vm.init() noun -= 1 while vm.run() != 19690720: verb += 1 vm.write(1, noun) vm.write(2, verb) vm.init() print(100*noun + verb) # 3146