Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.44 KB | None | 0 0
  1. import itertools, math, sys
  2. phaseSettings = itertools.permutations([5,6,7,8,9])
  3. # with open("input.txt","r") as f: data=f.readline()
  4. with open("test1.txt","r") as f: data=f.readline()
  5. data = [int(x) for x in data[:-1].split(',')]
  6. memories=[]
  7. for x in range(0,5): memories.append([data,0,False])
  8. def setVals(memory,pointer,registerI,noVals):
  9.     register = []
  10.     for i in range(0,noVals):
  11.         if registerI[i]:
  12.             register.append(memory[pointer+i+1])
  13.         else:
  14.             register.append(memory[memory[pointer+i+1]])
  15.     return register
  16. def compute(phaseSetting, value, memory, pointer, phaseDone):
  17.     registerI = [False, False, False]
  18.     while True:
  19.         iStuff = str(memory[pointer])[:-2][::-1]
  20.         for i in range(0,3):
  21.             if len(iStuff)<=i:
  22.                 registerI[i]=False
  23.             else:
  24.                 registerI[i]=bool(int(iStuff[i]))
  25.  
  26.         #Add
  27.         if str(memory[pointer])[-1]=="1":
  28.             registerI[2]=True
  29.             register = setVals(memory,pointer,registerI,3)
  30.             memory[register[2]] = register[0]+register[1]
  31.             pointer+=4
  32.         #Multiply
  33.         elif str(memory[pointer])[-1]=="2":
  34.             registerI[2]=True
  35.             register = setVals(memory,pointer,registerI,3)
  36.             memory[register[2]] = register[0]*register[1]
  37.             pointer+=4
  38.         #Input
  39.         elif str(memory[pointer])[-1]=="3":
  40.             registerI[0]=True
  41.             register = setVals(memory,pointer,registerI,1)
  42.             # print("--- Input Number ---")
  43.             if phaseDone==False:
  44.                 register.append(phaseSetting)
  45.                 phaseDone=True
  46.             else:
  47.                 register.append(value)
  48.             memory[register[0]] = register[1]
  49.             pointer+=2
  50.         #Output
  51.         elif str(memory[pointer])[-1]=="4":
  52.             register = setVals(memory,pointer,registerI,1)
  53.             pointer+=2
  54.             return(register[0], memory, pointer, phaseDone)
  55.         #jump-if-true
  56.         elif str(memory[pointer])[-1]=="5":
  57.             register = setVals(memory,pointer,registerI,2)
  58.             if register[0]!=0:
  59.                 pointer=register[1]
  60.             else:
  61.                 pointer+=3
  62.         #jump-if-false
  63.         elif str(memory[pointer])[-1]=="6":
  64.             register = setVals(memory,pointer,registerI,2)
  65.             if register[0]==0:
  66.                 pointer=register[1]
  67.             else:
  68.                 pointer+=3
  69.         #less-than
  70.         elif str(memory[pointer])[-1]=="7":
  71.             registerI[2]=True
  72.             register = setVals(memory,pointer,registerI,3)
  73.             if register[0] < register[1]:
  74.                 memory[register[2]] = 1
  75.             else:
  76.                 memory[register[2]] = 0
  77.             pointer+=4
  78.         #equals
  79.         elif str(memory[pointer])[-1]=="8":
  80.             registerI[2]=True
  81.             register = setVals(memory,pointer,registerI,3)
  82.             if register[0] == register[1]:
  83.                 memory[register[2]] = 1
  84.             else:
  85.                 memory[register[2]] = 0
  86.             pointer+=4
  87.         #Stop
  88.         else:
  89.             print(value)
  90.             sys.exit()
  91.        
  92.  
  93.  
  94.  
  95. k=[9,7,8,5,6]
  96.  
  97. c=0
  98. currentVal=0
  99. while True:
  100.     for p in k:
  101.         currentVal, memories[c%5][0], memories[c%5][1], memories[c%5][2] = compute(p, currentVal, memories[c%5][0], memories[c%5][1], memories[c%5][2])
  102.         print(currentVal)
  103.         c+=1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement