Advertisement
Guest User

level.py

a guest
Mar 21st, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. import rubik
  2. from collections import deque
  3.  
  4. def positions_at_level(level):
  5. """
  6. Using BFS, returns the number of cube configurations that are
  7. exactly a given number of levels away from the starting position
  8. (rubik.I), using the rubik.quarter_twists move set.
  9. """
  10. moves = {} #set a list of moves
  11. for turn in rubik.quarter_twists:
  12. moves[turn] = turn #insert moves from quarter_twist
  13. Q = deque([moves, None]) #create new deque Q =(moves, None)
  14.  
  15. for x in range(level): #for each move in level
  16. while True: #loop
  17. v = moves.popleft() #return leftmost element from Q
  18. if v is None: #if at the end of Q (None)
  19. Q.append(None) #add None to Q
  20. break #break from loop
  21. position = v[0] #set vertex to move
  22. otherparents = v[1] #set parent pointers
  23. for i in moves: #start BFS
  24. nextpos = rubik.perm_apply(i, position) #set node to search
  25. parents[nextpos] = (moves[i], position) #set parent pointer to node, vertex
  26. Q.append((nextpos, v[1])) #add expanded search to Q
  27. if nextpos in otherparents: #if node discovered in both searches
  28. path = path(nextpos, parents) #path with parent pointers
  29. return len(path) #return number of list of moves to solved state (rubiks.I)
  30.  
  31. return None #else return None
  32.  
  33. def path(pos, parents): #returns path between node and parents (parent pointers)
  34. path = [] #path = empty list
  35. while True: #loop
  36. movepos = parents[pos] #set move position to parent pointer
  37. if movepos is None: #if no parent pointers
  38. path.reverse() #invert parent pointers (path to node)
  39. return path #return path
  40. path.append(movepos[0]) #add current parent pointer to list
  41. pos = movepos[1] #move to next parent pointer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement