Advertisement
Guest User

Untitled

a guest
Mar 30th, 2013
852
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.18 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. uncover = {
  4.     0 : [(1,2),(3,6),(4,8)],
  5.     1 : [(4,7)],
  6.     2 : [(1,0),(4,6),(5,8)],
  7.  
  8.     3 : [(4,5)],
  9.     4 : [],
  10.     5 : [(4,3)],
  11.  
  12.     6 : [(3,0),(4,2),(7,8)],
  13.     7 : [(4,1)],
  14.     8 : [(7,6),(4,0),(5,2)],
  15. }
  16.  
  17. allpos = range(9)
  18. cover = lambda c: [x for x in allpos if x not in c]
  19. available = {
  20.   0 : cover([0,2,6,8]),
  21.   1 : cover([1,7]),
  22.   2 : cover([0,2,6,8]),
  23.  
  24.   3 : cover([3,5]),
  25.   4 : cover([4]),
  26.   5 : cover([5,3]),
  27.  
  28.   6 : cover([0,2,6,8]),
  29.   7 : cover([7,1]),
  30.   8 : cover([0,2,6,8]),
  31. }
  32.  
  33. def visible(path):
  34.     last = path[-1]
  35.     vis = list(available[last])
  36.     for c,u in uncover[last]:
  37.         if c in path[:-1]:
  38.             vis.append(u)
  39.     return vis
  40.  
  41. def nextpaths(path):
  42.     return [path + [s] for s in visible(path) if s not in path]
  43.  
  44. def extend(paths, length):
  45.     if length != 0:
  46.         return extend([np for p in paths for np in nextpaths(p)], length-1)
  47.     else:
  48.         return paths
  49.  
  50. corner = [[0]]
  51. side = [[1]]
  52. middle = [[4]]
  53.  
  54. for length in range(1,9):
  55.     print length, (  4*len(extend(corner, length))
  56.                    + 4*len(extend(side, length))
  57.                    + len(extend(middle, length)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement