Guest User

puzzle.py

a guest
May 8th, 2019
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.97 KB | None | 0 0
  1. from collections import deque
  2. from sys import intern
  3.  
  4.  
  5. def solve(pos, depthFirst=False):
  6.     queue = deque([pos])
  7.     trail = {intern(pos.canonical()): None}
  8.     solution = deque()
  9.     load = queue.append if depthFirst else queue.appendleft
  10.  
  11.     while not pos.isgoal():
  12.         for m in pos:
  13.             c = m.canonical()
  14.             if c in trail:
  15.                 continue
  16.             trail[intern(c)] = pos
  17.             load(m)
  18.         pos = queue.pop()
  19.  
  20.     while pos:
  21.         solution.appendleft(pos)
  22.         pos = trail[pos.canonical()]
  23.  
  24.     return list(solution)
  25.  
  26.    
  27. class Puzzle:
  28.     def __init__(self, pos=None):
  29.         if pos:
  30.             self.pos = pos
  31.            
  32.     def __repr__(self):
  33.         return repr(self.pos)
  34.        
  35.     def canonical(self):
  36.         return repr(self.pos)
  37.        
  38.     def isgoal(self):
  39.         return self.pos == self.goal
  40.        
  41.     def solve(self, depthFirst=False):
  42.         return solve(self, depthFirst)
Advertisement
Add Comment
Please, Sign In to add comment