Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.99 KB | None | 0 0
  1.  
  2.  
  3. class code:
  4.     codeID='00'
  5.     numParam=0
  6.     def getValue(self,currentPosition,p1Mode=-1,p2Mode=-1,p3Mode=-1):
  7.         val1,val2,val3=None,None,None
  8.         if p1Mode=='0':
  9.             val1=program[program[currentPosition+1]]
  10.         elif p1Mode=='1':
  11.             val1=program[currentPosition+1]
  12.         if p2Mode=='0':
  13.             val2=program[program[currentPosition+2]]
  14.         elif p2Mode=='1':
  15.             val2=program[currentPosition+2]
  16.         if p3Mode=='0':
  17.             val3=program[program[currentPosition+3]]
  18.         elif p3Mode=='1':
  19.             val3=program[currentPosition+3]
  20.         return (val1,val2,val3)
  21.     def executeCmd(self,program,cmd,currentPosition): #Has access to the global input and output buffers
  22.         pass
  23.  
  24. class code01(code):
  25.     codeID='01'
  26.     numParam=3
  27.     def executeCmd(self,program,cmd,currentPosition):
  28.         p1Mode = cmd[2]
  29.         p2Mode = cmd[1]
  30.         p3Mode = '1'
  31.         val1,val2,val3 = self.getValue(currentPosition,p1Mode,p2Mode,p3Mode)
  32.         program[val3]=int(val1)+int(val2)
  33.         newPosition = currentPosition + self.numParam +1
  34.         return (program,newPosition)
  35.  
  36. class code02(code):
  37.     codeID='02'
  38.     numParam=3
  39.     def executeCmd(self,program,cmd,currentPosition):
  40.         p1Mode = cmd[2]
  41.         p2Mode = cmd[1]
  42.         p3Mode = '1'
  43.         val1,val2,val3 = self.getValue(currentPosition,p1Mode,p2Mode,p3Mode)
  44.         program[val3]=int(val1)*int(val2)
  45.         newPosition = currentPosition + self.numParam +1
  46.         return (program,newPosition)
  47.  
  48. class code03(code):
  49.     codeID='03'
  50.     numParam=1
  51.     def executeCmd(self,program,cmd,currentPosition):
  52.         val=input.pop(0)
  53.         program[program[currentPosition+1]]=val
  54.         newPosition = currentPosition + self.numParam +1
  55.         return (program,newPosition)
  56.  
  57. class code04(code):
  58.     codeID='04'
  59.     numParam=1
  60.     def executeCmd(self,program,cmd,currentPosition):
  61.         output.append(program[program[currentPosition+1]])
  62.         newPosition = currentPosition + self.numParam +1
  63.         return (program,newPosition)
  64.  
  65. class code05(code):
  66.     codeID='05'
  67.     numParam=2
  68.     def executeCmd(self,program,cmd,currentPosition):
  69.         p1Mode = cmd[2]
  70.         p2Mode = cmd[1]
  71.         val1,val2,_=self.getValue(currentPosition,p1Mode,p2Mode)
  72.         if val1!=0:
  73.             newPosition =  val2
  74.         else:
  75.             newPosition = currentPosition + self.numParam +1
  76.         return (program,newPosition)
  77.  
  78. class code06(code):
  79.     codeID='06'
  80.     numParam=2
  81.     def executeCmd(self,program,cmd,currentPosition):
  82.         p1Mode = cmd[2]
  83.         p2Mode = cmd[1]
  84.         val1,val2,_=self.getValue(currentPosition,p1Mode,p2Mode)
  85.         if val1==0:
  86.             newPosition = val2
  87.         else:
  88.             newPosition = currentPosition + self.numParam +1
  89.         return (program,newPosition)
  90.  
  91. class code07(code):
  92.     codeID='07'
  93.     numParam=3
  94.     def executeCmd(self,program,cmd,currentPosition):
  95.         p1Mode = cmd[2]
  96.         p2Mode = cmd[1]
  97.         p3Mode = '1'
  98.         val1,val2,val3=self.getValue(currentPosition,p1Mode,p2Mode,p3Mode)
  99.         if val1 < val2:
  100.             program[val3]=1
  101.         else:
  102.             program[val3]=0
  103.         newPosition = currentPosition+self.numParam+1
  104.         return (program,newPosition)
  105.  
  106. class code08(code):
  107.     codeID='08'
  108.     numParam=3
  109.     def executeCmd(self,program,cmd,currentPosition):
  110.         p1Mode = cmd[2]
  111.         p2Mode = cmd[1]
  112.         p3Mode = '1'
  113.         val1,val2,val3=self.getValue(currentPosition,p1Mode,p2Mode,p3Mode)
  114.         if val1 == val2:
  115.             program[val3]=1
  116.         else:
  117.             program[val3]=0
  118.         newPosition = currentPosition+self.numParam+1
  119.         return (program,newPosition)
  120.  
  121.  
  122.  
  123. class code99(code):
  124.     codeID='99'
  125.     numParam=0
  126.     def executeCmd(self,program,cmd,currentPosition):
  127.         return (program,-1)
  128.  
  129.  
  130.  
  131. codes = [code01(),code02(),code03(),code04(),code05(),code06(),code07(),code08(),code99()]
  132.  
  133. ##
  134. ##PROGRAM DEFINITION AND EXECUTION
  135. ##
  136.  
  137. mys = '3,225,1,225,6,6,1100,1,238,225,104,0,1102,78,40,225,1102,52,43,224,1001,224,-2236,224,4,224,102,8,223,223,101,4,224,224,1,224,223,223,1,191,61,224,1001,224,-131,224,4,224,102,8,223,223,101,4,224,224,1,223,224,223,1101,86,74,225,1102,14,76,225,1101,73,83,224,101,-156,224,224,4,224,102,8,223,223,101,6,224,224,1,224,223,223,1102,43,82,225,2,196,13,224,101,-6162,224,224,4,224,102,8,223,223,101,5,224,224,1,223,224,223,1001,161,51,224,101,-70,224,224,4,224,102,8,223,223,1001,224,1,224,1,224,223,223,102,52,187,224,1001,224,-832,224,4,224,102,8,223,223,101,1,224,224,1,224,223,223,1102,19,79,225,101,65,92,224,1001,224,-147,224,4,224,1002,223,8,223,101,4,224,224,1,223,224,223,1102,16,90,225,1102,45,44,225,1102,92,79,225,1002,65,34,224,101,-476,224,224,4,224,102,8,223,223,1001,224,5,224,1,224,223,223,4,223,99,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,1105,0,99999,1105,227,247,1105,1,99999,1005,227,99999,1005,0,256,1105,1,99999,1106,227,99999,1106,0,265,1105,1,99999,1006,0,99999,1006,227,274,1105,1,99999,1105,1,280,1105,1,99999,1,225,225,225,1101,294,0,0,105,1,0,1105,1,99999,1106,0,300,1105,1,99999,1,225,225,225,1101,314,0,0,106,0,0,1105,1,99999,107,226,226,224,1002,223,2,223,1005,224,329,1001,223,1,223,1007,226,226,224,102,2,223,223,1005,224,344,101,1,223,223,1008,226,226,224,102,2,223,223,1005,224,359,1001,223,1,223,8,226,677,224,102,2,223,223,1006,224,374,101,1,223,223,1107,226,677,224,1002,223,2,223,1006,224,389,101,1,223,223,1108,226,677,224,102,2,223,223,1005,224,404,101,1,223,223,107,677,677,224,102,2,223,223,1006,224,419,1001,223,1,223,7,677,226,224,102,2,223,223,1005,224,434,101,1,223,223,1007,677,677,224,102,2,223,223,1005,224,449,1001,223,1,223,108,226,677,224,102,2,223,223,1005,224,464,1001,223,1,223,108,226,226,224,102,2,223,223,1006,224,479,101,1,223,223,107,226,677,224,102,2,223,223,1006,224,494,1001,223,1,223,7,226,226,224,1002,223,2,223,1006,224,509,101,1,223,223,1108,677,226,224,102,2,223,223,1005,224,524,101,1,223,223,1107,677,226,224,102,2,223,223,1005,224,539,101,1,223,223,1008,677,226,224,102,2,223,223,1005,224,554,101,1,223,223,1008,677,677,224,1002,223,2,223,1006,224,569,101,1,223,223,1107,677,677,224,102,2,223,223,1006,224,584,1001,223,1,223,1108,226,226,224,1002,223,2,223,1006,224,599,101,1,223,223,7,226,677,224,102,2,223,223,1006,224,614,101,1,223,223,108,677,677,224,1002,223,2,223,1006,224,629,101,1,223,223,1007,677,226,224,102,2,223,223,1006,224,644,101,1,223,223,8,677,677,224,1002,223,2,223,1006,224,659,101,1,223,223,8,677,226,224,102,2,223,223,1005,224,674,101,1,223,223,4,223,99,226'
  138. #mys = '1,9,10,3,2,3,11,0,99,30,40,50'
  139. global input
  140. input = [5]
  141. global output
  142. output = []
  143.  
  144. program = mys.split(',')
  145. program = [int(x) for x in program]
  146.  
  147.  
  148.  
  149. index = 0
  150.  
  151.  
  152. while index!=-1:
  153.     opcode =f"{program[index]:05}"
  154.     opCodeID=opcode[-2:]
  155.     opCodeObject = [x for x in codes if x.codeID==opCodeID]
  156.     if opCodeObject:
  157.         program, index = opCodeObject[0].executeCmd(program,opcode,index)
  158.     else:
  159.         print("Error Invalid OP code")
  160.         index=-1
  161.  
  162. print(output)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement