Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.19 KB | None | 0 0
  1. reg="""3,225,1,225,6,6,1100,1,238,225,104,0,1101,90,60,224,1001,224,-150,224,4,224,1002,223,8,223,1001,224,7,224,1,224,223,223,1,57,83,224,1001,224,-99,224,4,224,1002,223,8,223,1001,224,5,224,1,223,224,223,1102,92,88,225,101,41,187,224,1001,224,-82,224,4,224,1002,223,8,223,101,7,224,224,1,224,223,223,1101,7,20,225,1101,82,64,225,1002,183,42,224,101,-1554,224,224,4,224,102,8,223,223,1001,224,1,224,1,224,223,223,1102,70,30,224,101,-2100,224,224,4,224,102,8,223,223,101,1,224,224,1,224,223,223,2,87,214,224,1001,224,-2460,224,4,224,1002,223,8,223,101,7,224,224,1,223,224,223,102,36,180,224,1001,224,-1368,224,4,224,1002,223,8,223,1001,224,5,224,1,223,224,223,1102,50,38,225,1102,37,14,225,1101,41,20,225,1001,217,7,224,101,-25,224,224,4,224,1002,223,8,223,101,2,224,224,1,224,223,223,1101,7,30,225,1102,18,16,225,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,7,226,226,224,102,2,223,223,1006,224,329,101,1,223,223,1107,677,226,224,102,2,223,223,1006,224,344,1001,223,1,223,8,677,226,224,1002,223,2,223,1005,224,359,101,1,223,223,107,677,677,224,1002,223,2,223,1006,224,374,101,1,223,223,7,677,226,224,1002,223,2,223,1006,224,389,101,1,223,223,108,677,226,224,1002,223,2,223,1005,224,404,101,1,223,223,1108,677,226,224,102,2,223,223,1005,224,419,101,1,223,223,8,226,677,224,102,2,223,223,1006,224,434,1001,223,1,223,1008,677,677,224,1002,223,2,223,1005,224,449,1001,223,1,223,1107,226,677,224,102,2,223,223,1006,224,464,101,1,223,223,107,226,677,224,1002,223,2,223,1006,224,479,1001,223,1,223,7,226,677,224,102,2,223,223,1005,224,494,1001,223,1,223,8,677,677,224,102,2,223,223,1006,224,509,1001,223,1,223,1108,677,677,224,102,2,223,223,1005,224,524,1001,223,1,223,1108,226,677,224,1002,223,2,223,1005,224,539,101,1,223,223,107,226,226,224,102,2,223,223,1006,224,554,1001,223,1,223,1007,226,226,224,102,2,223,223,1005,224,569,1001,223,1,223,1008,226,226,224,102,2,223,223,1005,224,584,101,1,223,223,1007,677,677,224,1002,223,2,223,1005,224,599,1001,223,1,223,108,677,677,224,1002,223,2,223,1006,224,614,1001,223,1,223,1007,226,677,224,1002,223,2,223,1006,224,629,101,1,223,223,1008,677,226,224,102,2,223,223,1005,224,644,101,1,223,223,1107,226,226,224,1002,223,2,223,1005,224,659,1001,223,1,223,108,226,226,224,1002,223,2,223,1005,224,674,101,1,223,223,4,223,99,226"""
  2. inputval = 0
  3. def extractvals(a):
  4. pa = int(a)
  5. pe = pa%10
  6. pa /= 10
  7. pa = int(pa)
  8. pd = pa%10
  9. pa /= 10
  10. pa = int(pa)
  11. pc = pa%10
  12. pa /= 10
  13. pa = int(pa)
  14. pb = pa%10
  15. pa /= 10
  16. pa = int(pa)
  17. return pa, pb, pc, pd, pe
  18. class Computer(object):
  19. def __init__(self, pc, reg, id):
  20. self.id = id
  21. self.pc = pc
  22. reg = [int(i) for i in reg.split(',')]
  23. self.reg = reg
  24. self.inputvals = []
  25. self.outs = []
  26. self.lastout = None
  27. self.nextc = None
  28. self.inputs = 0
  29. def addinput(self, a):
  30. self.inputs += 1
  31. self.inputvals.append(a)
  32. #print('add input id', self.id, a)
  33. def addinputs(self, a):
  34. for i in a:
  35. self.addinput(a)
  36. def attempt(self):
  37. #print("begin attempt" + str(self.id))
  38. reg = self.reg
  39. def inputf():
  40.  
  41. if len(self.inputvals) == 0:
  42. #print("suspending", self.id, self.pc)
  43. raise Exception()
  44. #print("consuming input", self.id, self.inputvals[0], self.pc)
  45. return self.inputvals.pop(0)
  46.  
  47. def outputf(a):
  48. self.lastout = a
  49. self.outs.append(a)
  50. self.nextc.addinput(a)
  51. #print("id",self.id, a)
  52.  
  53. def op1(a, b, c, d, reg):
  54. pa, pb, pc, _, _ = extractvals(a)
  55. if pc == 1:
  56. rb = b
  57. else:
  58. rb = reg[b]
  59. if pb == 1:
  60. rc = c
  61. else:
  62. rc = reg[c]
  63. #print(rb)
  64. #print(rc)
  65. reg[d] = rb + rc
  66.  
  67. def op2(a, b,c,d, reg):
  68. pa, pb, pc, _, _ = extractvals(a)
  69. if pc == 1:
  70. rb = b
  71. else:
  72. rb = reg[b]
  73. if pb == 1:
  74. rc = c
  75. else:
  76. rc = reg[c]
  77. reg[d] = rb * rc
  78.  
  79. def op3(b, reg):
  80. reg[b] = inputf()
  81.  
  82. def op4(b, reg):
  83. outputf(reg[b])
  84.  
  85. def op5(a,b,c, reg, counter):
  86. pa, pb, pc, _, _ = extractvals(a)
  87. if pc == 1:
  88. rb = b
  89. else:
  90. rb = reg[b]
  91. if pb == 1:
  92. rc = c
  93. else:
  94. rc = reg[c]
  95. if rb != 0:
  96. return rc
  97. else:
  98. return 3 + counter
  99. def op6(a,b,c, reg, counter):
  100. pa, pb, pc, _, _ = extractvals(a)
  101. if pc == 1:
  102. rb = b
  103. else:
  104. rb = reg[b]
  105. if pb == 1:
  106. rc = c
  107. else:
  108. rc = reg[c]
  109. if rb == 0:
  110. return rc
  111. else:
  112. return 3 + counter
  113. def op7(a,b,c,d, reg):
  114. pa, pb, pc, _, _ = extractvals(a)
  115. if pc == 1:
  116. rb = b
  117. else:
  118. rb = reg[b]
  119. if pb == 1:
  120. rc = c
  121. else:
  122. rc = reg[c]
  123. if rb < rc:
  124. reg[d] = 1
  125. else:
  126. reg[d] = 0
  127. def op8(a,b,c,d, reg):
  128. pa, pb, pc, _, _ = extractvals(a)
  129. if pc == 1:
  130. rb = b
  131. else:
  132. rb = reg[b]
  133. if pb == 1:
  134. rc = c
  135. else:
  136. rc = reg[c]
  137. if rb == rc:
  138. reg[d] = 1
  139. else:
  140. reg[d] = 0
  141. pc = self.pc
  142. while True:
  143. i = pc
  144. #print("pc counter", self.id, pc)
  145.  
  146. if reg[i]%10 == 1:
  147. op1(reg[i], reg[i+1], reg[i+2], reg[i+3], reg)
  148. pc += 4
  149. elif reg[i]%10 == 2:
  150. op2(reg[i], reg[i+1], reg[i+2], reg[i+3], reg)
  151. pc += 4
  152. elif reg[i]%10 == 3:
  153. try:
  154. op3(reg[i+1], reg)
  155. except Exception:
  156. return 1;
  157. pc += 2
  158. elif reg[i]%10 == 4:
  159. op4(reg[i+1], reg)
  160. pc += 2
  161. elif reg[i]%10 == 5:
  162. pc = op5(reg[i], reg[i+1], reg[i+2], reg, pc)
  163. elif reg[i]%10 == 6:
  164. pc = op6(reg[i], reg[i+1], reg[i+2], reg, pc)
  165. elif reg[i]%10 == 7:
  166. op7(reg[i], reg[i+1], reg[i+2], reg[i+3], reg)
  167. pc+=4
  168. elif reg[i]%10 == 8:
  169. op8(reg[i], reg[i+1], reg[i+2], reg[i+3], reg)
  170. pc+=4
  171. elif reg[i] == 99:
  172. #print("halted")
  173. return 0
  174. #print("pc counter", self.id, pc)
  175. self.pc = pc
  176. return 0
  177.  
  178. def optimize(seq):
  179. reg = """3,8,1001,8,10,8,105,1,0,0,21,34,55,68,93,106,187,268,349,430,99999,3,9,102,5,9,9,1001,9,2,9,4,9,99,3,9,1001,9,5,9,102,2,9,9,101,2,9,9,102,2,9,9,4,9,99,3,9,101,2,9,9,102,4,9,9,4,9,99,3,9,101,4,9,9,102,3,9,9,1001,9,2,9,102,4,9,9,1001,9,2,9,4,9,99,3,9,101,2,9,9,1002,9,5,9,4,9,99,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,1,9,9,4,9,99,3,9,101,2,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,1,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,1001,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,102,2,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,2,9,9,4,9,99,3,9,102,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,101,1,9,9,4,9,3,9,101,1,9,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,2,9,4,9,99,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,101,1,9,9,4,9,3,9,101,1,9,9,4,9,99,3,9,101,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,99"""
  180. #reg = """3,26,1001,26,-4,26,3,27,1002,27,2,27,1,27,26,27,4,27,1001,28,-1,28,1005,28,6,99,0,0,5"""
  181. #reg = "3,23,3,24,1002,24,10,24,1002,23,-1,23,101,5,23,23,1,24,23,23,4,23,99,0,0"
  182. #reg = "3,52,1001,52,-5,52,3,53,1,52,56,54,1007,54,5,55,1005,55,26,1001,54,-5,54,1105,1,12,1,53,54,53,1008,54,0,55,1001,55,1,55,2,53,55,53,4,53,1001,56,-1,56,1005,56,6,99,0,0,0,0,10"
  183. computers = [Computer(0, reg, i) for i in range(5)]
  184. for i in range(5):
  185. computers[i].nextc = computers[(i+1)%5]
  186.  
  187. for i in range(5):
  188. computers[i].addinput(seq[i])
  189.  
  190. computers[0].addinput(0)
  191. suspended = 5
  192. lastval = 0
  193. while suspended != 0:
  194. #for i in range(2):
  195. suspended = 0
  196. for i in range(len(computers)):
  197. suspend = computers[i].attempt()
  198. suspended += suspend
  199. return computers[4].lastout
  200.  
  201. def maxopt():
  202. import itertools
  203. maxval = 0
  204. maxseq = []
  205. r = range(0,5)
  206. r = range(5, 10)
  207. for seq in itertools.permutations(list(r)):
  208. val = optimize(seq)
  209. if maxval < val:
  210. maxval = val
  211. maxseq = seq
  212. print(maxval)
  213. print("".join(map(str,maxseq)))
  214. maxopt()
  215. #print(optimize([9,8,7,6,5]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement