Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class code:
- codeID='00'
- numParam=0
- def getValue(self,currentPosition,p1Mode=-1,p2Mode=-1,p3Mode=-1):
- val1,val2,val3=None,None,None
- if p1Mode=='0':
- val1=program[program[currentPosition+1]]
- elif p1Mode=='1':
- val1=program[currentPosition+1]
- if p2Mode=='0':
- val2=program[program[currentPosition+2]]
- elif p2Mode=='1':
- val2=program[currentPosition+2]
- if p3Mode=='0':
- val3=program[program[currentPosition+3]]
- elif p3Mode=='1':
- val3=program[currentPosition+3]
- return (val1,val2,val3)
- def executeCmd(self,program,cmd,currentPosition): #Has access to the global input and output buffers
- pass
- class code01(code):
- codeID='01'
- numParam=3
- def executeCmd(self,program,cmd,currentPosition):
- p1Mode = cmd[2]
- p2Mode = cmd[1]
- p3Mode = '1'
- val1,val2,val3 = self.getValue(currentPosition,p1Mode,p2Mode,p3Mode)
- program[val3]=int(val1)+int(val2)
- newPosition = currentPosition + self.numParam +1
- return (program,newPosition)
- class code02(code):
- codeID='02'
- numParam=3
- def executeCmd(self,program,cmd,currentPosition):
- p1Mode = cmd[2]
- p2Mode = cmd[1]
- p3Mode = '1'
- val1,val2,val3 = self.getValue(currentPosition,p1Mode,p2Mode,p3Mode)
- program[val3]=int(val1)*int(val2)
- newPosition = currentPosition + self.numParam +1
- return (program,newPosition)
- class code03(code):
- codeID='03'
- numParam=1
- def executeCmd(self,program,cmd,currentPosition):
- val=input.pop(0)
- program[program[currentPosition+1]]=val
- newPosition = currentPosition + self.numParam +1
- return (program,newPosition)
- class code04(code):
- codeID='04'
- numParam=1
- def executeCmd(self,program,cmd,currentPosition):
- output.append(program[program[currentPosition+1]])
- newPosition = currentPosition + self.numParam +1
- return (program,newPosition)
- class code05(code):
- codeID='05'
- numParam=2
- def executeCmd(self,program,cmd,currentPosition):
- p1Mode = cmd[2]
- p2Mode = cmd[1]
- val1,val2,_=self.getValue(currentPosition,p1Mode,p2Mode)
- if val1!=0:
- newPosition = val2
- else:
- newPosition = currentPosition + self.numParam +1
- return (program,newPosition)
- class code06(code):
- codeID='06'
- numParam=2
- def executeCmd(self,program,cmd,currentPosition):
- p1Mode = cmd[2]
- p2Mode = cmd[1]
- val1,val2,_=self.getValue(currentPosition,p1Mode,p2Mode)
- if val1==0:
- newPosition = val2
- else:
- newPosition = currentPosition + self.numParam +1
- return (program,newPosition)
- class code07(code):
- codeID='07'
- numParam=3
- def executeCmd(self,program,cmd,currentPosition):
- p1Mode = cmd[2]
- p2Mode = cmd[1]
- p3Mode = '1'
- val1,val2,val3=self.getValue(currentPosition,p1Mode,p2Mode,p3Mode)
- if val1 < val2:
- program[val3]=1
- else:
- program[val3]=0
- newPosition = currentPosition+self.numParam+1
- return (program,newPosition)
- class code08(code):
- codeID='08'
- numParam=3
- def executeCmd(self,program,cmd,currentPosition):
- p1Mode = cmd[2]
- p2Mode = cmd[1]
- p3Mode = '1'
- val1,val2,val3=self.getValue(currentPosition,p1Mode,p2Mode,p3Mode)
- if val1 == val2:
- program[val3]=1
- else:
- program[val3]=0
- newPosition = currentPosition+self.numParam+1
- return (program,newPosition)
- class code99(code):
- codeID='99'
- numParam=0
- def executeCmd(self,program,cmd,currentPosition):
- return (program,-1)
- codes = [code01(),code02(),code03(),code04(),code05(),code06(),code07(),code08(),code99()]
- ##
- ##PROGRAM DEFINITION AND EXECUTION
- ##
- 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'
- #mys = '1,9,10,3,2,3,11,0,99,30,40,50'
- global input
- input = [5]
- global output
- output = []
- program = mys.split(',')
- program = [int(x) for x in program]
- index = 0
- while index!=-1:
- opcode =f"{program[index]:05}"
- opCodeID=opcode[-2:]
- opCodeObject = [x for x in codes if x.codeID==opCodeID]
- if opCodeObject:
- program, index = opCodeObject[0].executeCmd(program,opcode,index)
- else:
- print("Error Invalid OP code")
- index=-1
- print(output)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement