Advertisement
Guest User

Untitled

a guest
Dec 19th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1. class AbstractOp():
  2. def __init__(self):
  3. self.registers = []
  4. self.can = set()
  5. self.cannot = set()
  6.  
  7. def compute(self, registers, inp):
  8. self.registers = list(registers)
  9. self._compute(inp)
  10. return self.registers
  11.  
  12. def _compute(self, input):
  13. raise RuntimeException()
  14.  
  15. def __str__(self):
  16. return self.__class__.__name__
  17.  
  18.  
  19. class Addr(AbstractOp):
  20. def _compute(self, inp):
  21. self.registers[inp[2]] = self.registers[inp[0]] + self.registers[inp[1]]
  22.  
  23. class Addi(AbstractOp):
  24. def _compute(self, inp):
  25. self.registers[inp[2]] = self.registers[inp[0]] + inp[1]
  26.  
  27. class Mulr(AbstractOp):
  28. def _compute(self, inp):
  29. self.registers[inp[2]] = self.registers[inp[0]] * self.registers[inp[1]]
  30.  
  31. class Muli(AbstractOp):
  32. def _compute(self, inp):
  33. self.registers[inp[2]] = self.registers[inp[0]] * inp[1]
  34.  
  35. class Banr(AbstractOp):
  36. def _compute(self, inp):
  37. self.registers[inp[2]] = self.registers[inp[0]] & self.registers[inp[1]]
  38.  
  39. class Bani(AbstractOp):
  40. def _compute(self, inp):
  41. self.registers[inp[2]] = self.registers[inp[0]] & inp[1]
  42.  
  43. class Borr(AbstractOp):
  44. def _compute(self, inp):
  45. self.registers[inp[2]] = self.registers[inp[0]] | self.registers[inp[1]]
  46.  
  47. class Bori(AbstractOp):
  48. def _compute(self, inp):
  49. self.registers[inp[2]] = self.registers[inp[0]] | inp[1]
  50.  
  51. class Setr(AbstractOp):
  52. def _compute(self, inp):
  53. self.registers[inp[2]] = self.registers[inp[0]]
  54.  
  55. class Seti(AbstractOp):
  56. def _compute(self, inp):
  57. self.registers[inp[2]] = inp[0]
  58.  
  59. class Gtir(AbstractOp):
  60. def _compute(self, inp):
  61. self.registers[inp[2]] = 1 if inp[0] > self.registers[inp[1]] else 0
  62.  
  63. class Gtri(AbstractOp):
  64. def _compute(self, inp):
  65. self.registers[inp[2]] = 1 if self.registers[inp[0]] > inp[1] else 0
  66.  
  67. class Gtrr(AbstractOp):
  68. def _compute(self, inp):
  69. self.registers[inp[2]] = 1 if self.registers[inp[0]] > self.registers[inp[1]] else 0
  70.  
  71. class Eqir(AbstractOp):
  72. def _compute(self, inp):
  73. self.registers[inp[2]] = 1 if inp[0] == self.registers[inp[1]] else 0
  74.  
  75. class Eqri(AbstractOp):
  76. def _compute(self, inp):
  77. self.registers[inp[2]] = 1 if self.registers[inp[0]] == inp[1] else 0
  78.  
  79. class Eqrr(AbstractOp):
  80. def _compute(self, inp):
  81. self.registers[inp[2]] = 1 if self.registers[inp[0]] == self.registers[inp[1]] else 0
  82.  
  83. class CPU():
  84. def __init__(self):
  85. self.registers = [0, 0, 0, 0]
  86. self.instructions = [Addr(), Addi(), Mulr(), Muli(), Banr(), Bani(), Borr(), Bori(),
  87. Setr(), Seti(), Gtir(), Gtri(), Gtrr(), Eqir(), Eqri(), Eqrr()]
  88. self.name_to_instr = {}
  89. for instr in self.instructions:
  90. self.name_to_instr[str(instr).lower()] = instr
  91. print self.name_to_instr
  92.  
  93. def execute_program(self, instructions):
  94. for instr in instructions:
  95. self.registers = self.opcodes_to_instr[instr[0]].compute(self.registers, instr[1:])
  96.  
  97.  
  98.  
  99.  
  100.  
  101. c = CPU()
  102.  
  103. #c.execute_program(instructions)
  104. #print c.registers
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement