Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. class Comp:
  2. def __init__(self, phase):
  3. self.prgrm = [int(x) for x in open("7.txt").read().split(",")]
  4. self.ip = 0
  5. self.phase = phase
  6. self.first = True
  7.  
  8. def reset(self, inp):
  9. self.prgrm = [int(x) for x in open("7.txt").read().split(",")]
  10. self.ip = 0
  11. self.first = True
  12.  
  13. self.run(inp)
  14.  
  15. def run(self, inp):
  16. while self.ip < len(self.prgrm):
  17. instr = str(self.prgrm[self.ip])
  18.  
  19. for _ in range(5 - len(instr)):
  20. instr = "0" + instr
  21.  
  22. if instr.endswith("99"):
  23. return None
  24.  
  25. one = None
  26. two = None
  27. three = None
  28. if self.ip + 1 < len(self.prgrm):
  29. one = self.prgrm[self.ip + 1] if instr[2] == "0" else self.ip + 1
  30. if self.ip + 2 < len(self.prgrm):
  31. two = self.prgrm[self.ip + 2] if instr[1] == "0" else self.ip + 2
  32. if self.ip + 3 < len(self.prgrm):
  33. three = self.prgrm[self.ip + 3] if instr[0] == "0" else self.ip + 3
  34.  
  35. if instr.endswith("01"):
  36. self.prgrm[three] = self.prgrm[one] + self.prgrm[two]
  37. self.ip += 4
  38.  
  39. elif instr.endswith("02"):
  40. self.prgrm[three] = self.prgrm[one] * self.prgrm[two]
  41. self.ip += 4
  42.  
  43. elif instr.endswith("03"):
  44. if self.first:
  45. self.prgrm[one] = self.phase
  46. self.first = False
  47. else:
  48. self.prgrm[one] = inp
  49. self.ip += 2
  50.  
  51. elif instr.endswith("04"):
  52. output = self.prgrm[one]
  53. self.ip += 2
  54. return output
  55.  
  56. elif instr.endswith("05"):
  57. if self.prgrm[one] != 0:
  58. self.ip = self.prgrm[two]
  59. else:
  60. self.ip += 3
  61.  
  62. elif instr.endswith("06"):
  63. if self.prgrm[one] == 0:
  64. self.ip = self.prgrm[two]
  65. else:
  66. self.ip += 3
  67.  
  68. elif instr.endswith("07"):
  69. if self.prgrm[one] < self.prgrm[two]:
  70. self.prgrm[three] = 1
  71. else:
  72. self.prgrm[three] = 0
  73.  
  74. self.ip += 4
  75.  
  76. elif instr.endswith("08"):
  77. if self.prgrm[one] == self.prgrm[two]:
  78. self.prgrm[three] = 1
  79. else:
  80. self.prgrm[three] = 0
  81.  
  82. self.ip += 4
  83.  
  84. else:
  85. print("i:", self.ip, "instr:", instr)
  86. break
  87.  
  88.  
  89. def finish(comps, inp):
  90. out = inp
  91. res = inp
  92. while res is not None:
  93. for comp in comps:
  94. res = comp.run(out)
  95.  
  96. if res is None:
  97. break
  98.  
  99. out = res
  100.  
  101. return out
  102.  
  103.  
  104. def go(i, inp, used_p, comps):
  105. for comp in comps:
  106. comp.reset(inp)
  107.  
  108. if i == 0:
  109. val = finish(comps, inp)
  110. print([p.phase for p in comps], val, inp)
  111. return val
  112.  
  113. mx = 0
  114. for p in range(5, 10):
  115. if p in used_p:
  116. continue
  117.  
  118. c = Comp(p)
  119. res = c.run(inp)
  120. mx = max(mx, go(i - 1, res, used_p + [p], comps + [c]))
  121.  
  122. return mx
  123.  
  124.  
  125. if __name__ == '__main__':
  126. print(go(5, 0, [], []))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement