Advertisement
Guest User

Untitled

a guest
Sep 29th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.39 KB | None | 0 0
  1. [1,2,0,0], length = 4, n = 2
  2.  
  3. [0,0,2,1]
  4.  
  5. if tuple(successor) not in s:
  6. s.add(tuple(successor))
  7.  
  8. def solve_distinct_disks(length, n):
  9.  
  10.  
  11.  
  12. board = [i + 1 if i < n else 0 for i in range(length)]
  13. solved = list(reversed(board))
  14. print board, solved
  15. if board == solved:
  16. return []
  17. d = collections.deque()
  18. s = set()
  19. d.append(([], board))
  20. while len(d) > 0:
  21. moves, current = d.popleft()
  22. for i, p in enumerate(current):
  23. if p != 0:
  24. if i + 1 < length and current[i + 1] == 0:
  25. move = (i, i + 1)
  26. successor = current[:]
  27. successor[i] = 0
  28. successor[i + 1] = p
  29. if successor == solved:
  30. return moves + [move]
  31. if tuple(successor) not in s:
  32. s.add(tuple(successor))
  33. d.append((moves + [move], successor))
  34. elif i + 2 < length and current[i + 2] == 0:
  35. move = (i, i + 2)
  36. successor = current[:]
  37. successor[i] = 0
  38. successor[i + 2] = p
  39. if successor == solved:
  40. return moves + [move]
  41. if tuple(successor) not in s:
  42. s.add(tuple(successor))
  43. d.append((moves + [move], successor))
  44. if i - 1 >= 0 and current[i - 1] == 0:
  45. move = (i, i - 1)
  46. successor = current[:]
  47. successor[i] = 0
  48. successor[i - 1] = p
  49. if successor == solved:
  50. return moves + [move]
  51. if tuple(successor) not in s:
  52. s.add(tuple(successor))
  53. d.append((moves + [move], successor))
  54. elif i - 2 >= 0 and current[i - 2] == 0:
  55. move = (i, i - 2)
  56. successor = current[:]
  57. successor[i] = 0
  58. successor[i - 2] = p
  59. if successor == solved:
  60. return moves + [move]
  61. if tuple(successor) not in s:
  62. s.add(tuple(successor))
  63. d.append((moves + [move], successor))
  64.  
  65. def solve_distinct_disks_2(length, n):
  66.  
  67.  
  68.  
  69. board = [i + 1 if i < n else 0 for i in range(length)]
  70. solved = list(reversed(board))
  71. print board, solved
  72.  
  73. if board == solved:
  74. return []
  75.  
  76. d = collections.deque()
  77. s = set()
  78. d.append(([], board))
  79.  
  80. while len(d) > 0:
  81. moves, current = d.popleft()
  82. s.add(tuple(current))
  83.  
  84. for i, p in enumerate(current):
  85. if p != 0:
  86. if i + 1 < length and current[i + 1] == 0:
  87. move = (i, i + 1)
  88. successor = current[:]
  89. successor[i] = 0
  90. successor[i + 1] = p
  91. if successor == solved:
  92. return moves + [move]
  93. if tuple(successor) not in s:
  94. d.append((moves + [move], successor))
  95. elif i + 2 < length and current[i + 2] == 0:
  96. move = (i, i + 2)
  97. successor = current[:]
  98. successor[i] = 0
  99. successor[i + 2] = p
  100. if successor == solved:
  101. return moves + [move]
  102. if tuple(successor) not in s:
  103. d.append((moves + [move], successor))
  104. if i - 1 >= 0 and current[i - 1] == 0:
  105. move = (i, i - 1)
  106. successor = current[:]
  107. successor[i] = 0
  108. successor[i - 1] = p
  109. if successor == solved:
  110. return moves + [move]
  111. if tuple(successor) not in s:
  112. d.append((moves + [move], successor))
  113. elif i - 2 >= 0 and current[i - 2] == 0:
  114. move = (i, i - 2)
  115. successor = current[:]
  116. successor[i] = 0
  117. successor[i - 2] = p
  118. if successor == solved:
  119. return moves + [move]
  120. if tuple(successor) not in s:
  121. d.append((moves + [move], successor))
  122.  
  123. def solve_distinct_disks_3(length, n):
  124.  
  125.  
  126.  
  127. board = [i + 1 if i < n else 0 for i in range(length)]
  128. solved = list(reversed(board))
  129. print board, solved
  130.  
  131. if board == solved:
  132. return []
  133.  
  134. d = collections.deque()
  135. s = set()
  136. d.append(([], board))
  137.  
  138. while len(d) > 0:
  139. moves, current = d.popleft()
  140.  
  141. if tuple(current) not in s:
  142. s.add(tuple(current))
  143. for i, p in enumerate(current):
  144. if p != 0:
  145. if i + 1 < length and current[i + 1] == 0:
  146. move = (i, i + 1)
  147. successor = current[:]
  148. successor[i] = 0
  149. successor[i + 1] = p
  150. if successor == solved:
  151. return moves + [move]
  152. d.append((moves + [move], successor))
  153. elif i + 2 < length and current[i + 2] == 0:
  154. move = (i, i + 2)
  155. successor = current[:]
  156. successor[i] = 0
  157. successor[i + 2] = p
  158. if successor == solved:
  159. return moves + [move]
  160. d.append((moves + [move], successor))
  161. if i - 1 >= 0 and current[i - 1] == 0:
  162. move = (i, i - 1)
  163. successor = current[:]
  164. successor[i] = 0
  165. successor[i - 1] = p
  166. if successor == solved:
  167. return moves + [move]
  168. d.append((moves + [move], successor))
  169. elif i - 2 >= 0 and current[i - 2] == 0:
  170. move = (i, i - 2)
  171. successor = current[:]
  172. successor[i] = 0
  173. successor[i - 2] = p
  174. if successor == solved:
  175. return moves + [move]
  176. d.append((moves + [move], successor))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement