class BubblesortProgramSet: NOP = Program('NOP') MOVE_PTR = MovePtrProgram('MOVE_PTR', 3, 2) SWAP = SwapProgram('SWAP') BUBBLESORT = Program('BUBBLESORT') BUBBLE = Program('BUBBLE') RESET = Program('RESET') BSTEP = Program('BSTEP') COMPSWAP = Program('COMPSWAP') LSHIFT = Program('LSHIFT') RSHIFT = Program('RSHIFT') def __init__(self): self.map = {} self.program_id = 0 self.register(self.NOP) self.register(self.MOVE_PTR) self.register(self.SWAP) self.register(self.BUBBLESORT) self.register(self.BUBBLE) self.register(self.RESET) self.register(self.BSTEP) self.register(self.COMPSWAP) self.register(self.LSHIFT) self.register(self.RSHIFT) def register(self, pg: Program): pg.program_id = self.program_id self.map[pg.program_id] = pg self.program_id += 1 def get(self, i: int): return self.map.get(i)
class AdditionProgramSet: NOP = Program('NOP') MOVE_PTR = MovePtrProgram('MOVE_PTR', 4, 2) # PTR_KIND(4), LEFT_OR_RIGHT(2) WRITE = WriteProgram('WRITE', 2, 10) # CARRY_OR_OUT(2), DIGITS(10) ADD = Program('ADD') ADD1 = Program('ADD1') CARRY = Program('CARRY') LSHIFT = Program('LSHIFT') RSHIFT = Program('RSHIFT') def __init__(self): self.map = {} self.program_id = 0 self.register(self.NOP) self.register(self.MOVE_PTR) self.register(self.WRITE) self.register(self.ADD) self.register(self.ADD1) self.register(self.CARRY) self.register(self.LSHIFT) self.register(self.RSHIFT) def register(self, pg: Program): pg.program_id = self.program_id self.map[pg.program_id] = pg self.program_id += 1 def get(self, i: int): return self.map.get(i)
class MultiplicationProgramSet: # includes the addition Programset MUL = Program('MUL') # multiply mul1 and mul2, when mul2 == 0, stop. COPY = CopyProgram( 'COPY' ) # copy whatever on the fourth row(the output row) and write on the second row(In2) SUB = SubtractProgram('SUB') # subtract mul2 by 1 NOP = Program('NOP') MOVE_PTR = MovePtrProgram('MOVE_PTR', 4, 2) # PTR_KIND(4), LEFT_OR_RIGHT(2) RESET_PTR = ResetPtrProgram('RESET_PTR', 4) # PTR_KIND(4), LEFT_OR_RIGHT(2) WRITE = WriteProgram('WRITE', 2, 10) # INCARRY_OR_OUT(2), DIGITS(10) ADD = Program('ADD') ADD1 = Program('ADD1') CARRY = Program('CARRY') LSHIFT = Program('LSHIFT') RSHIFT = Program('RSHIFT') def __init__(self): self.map = {} self.program_id = 0 self.register(self.MUL) self.register(self.SUB) self.register(self.COPY) self.register(self.NOP) self.register(self.MOVE_PTR) self.register(self.RESET_PTR) self.register(self.WRITE) self.register(self.ADD) self.register(self.ADD1) self.register(self.CARRY) self.register(self.LSHIFT) self.register(self.RSHIFT) def register(self, pg: Program): pg.program_id = self.program_id self.map[pg.program_id] = pg self.program_id += 1 def get(self, i: int): return self.map.get(i)