32 lines
1.2 KiB
Python
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))
|