aoc2019/intcode.py
2021-11-26 08:35:16 +01:00

32 lines
1.2 KiB
Python

from typing import List
class IntCode:
def __init__(self, memory: List[int], mem_size: int = 0):
self.instr_ptr = 0
self.halted = False
self.memory = memory
if len(self.memory) < mem_size:
self.memory.extend([0] * (mem_size - len(self.memory)))
def run(self):
while not self.halted:
instr = self.memory[self.instr_ptr]
if instr == 1:
address1 = self.memory[self.instr_ptr + 1]
address2 = self.memory[self.instr_ptr + 2]
address3 = self.memory[self.instr_ptr + 3]
self.memory[address3] = self.memory[address1] + self.memory[address2]
self.instr_ptr += 4
elif instr == 2:
address1 = self.memory[self.instr_ptr + 1]
address2 = self.memory[self.instr_ptr + 2]
address3 = self.memory[self.instr_ptr + 3]
self.memory[address3] = self.memory[address1] * self.memory[address2]
self.instr_ptr += 4
elif instr == 99:
self.halted = True
else:
raise ValueError("Invalid instruction encountered at pos %d: %d" % (self.instr_ptr, instr))