Advertisement
Soadreqm

jumpypegthing

Mar 13th, 2014
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.24 KB | None | 0 0
  1. #Python 3.2
  2. #Antti Virkkunen
  3. #2014-03-12
  4.  
  5.  
  6. import time
  7.  
  8. solution = []
  9.  
  10.  
  11. class Board:
  12.     pegs = []
  13.    
  14.     def __init__(self):
  15.         self.pegs = [
  16.                      [1],
  17.                     [1,1],
  18.                    [1,0,1],
  19.                   [1,1,1,1],
  20.                  [1,1,1,1,1]
  21.                     ]
  22.    
  23.     def clone(self):
  24.         newBoard = Board()
  25.         newBoard.pegs = []
  26.         i = 0
  27.         for row in self.pegs:
  28.             newBoard.pegs.append([])
  29.             for peg in row:
  30.                 newBoard.pegs[i].append(peg)
  31.             i+=1
  32.         return newBoard
  33.    
  34.     def printPegs(self):
  35.         offsetNumber = len(self.pegs[len(self.pegs) - 1]) - 1
  36.         offsetString = " " * offsetNumber
  37.         for subList in self.pegs:
  38.             print(offsetString, end='')
  39.             offsetString = offsetString[:-1]
  40.             for peg in subList:
  41.                 print(str(peg) + ' ', end='')
  42.             print()
  43.            
  44.     def sum(self):
  45.         s = 0
  46.         for row in self.pegs:
  47.             for peg in row:
  48.                 s += peg
  49.         return s
  50.        
  51.     def solve(self):
  52.         if self.sum() == 1:
  53.             solution.append(self)
  54.             return True   #hooray we solved it!
  55.         for i in range(0,len(self.pegs)):
  56.             for j in range(0,len(self.pegs[i])):
  57.                 if self.pegs[i][j] == 1:
  58.                     #up-left
  59.                     if (
  60.                     i >= 2
  61.                     and j >= 2
  62.                     and (self.pegs[i-1][j-1] == 1)
  63.                     and (self.pegs[i-2][j-2] == 0)
  64.                     ):
  65.                         nextBoard = self.clone()
  66.                         nextBoard.pegs[i][j] = 0
  67.                         nextBoard.pegs[i-1][j-1] = 0
  68.                         nextBoard.pegs[i-2][j-2] = 1
  69.                         if nextBoard.solve():
  70.                             solution.append(self)
  71.                             return True  
  72.                     #up-right
  73.                     if (
  74.                     i >=  2
  75.                     and j <= i-2
  76.                     and (self.pegs[i-1][j] == 1)
  77.                     and (self.pegs[i-2][j] == 0)
  78.                     ):
  79.                         nextBoard = self.clone()
  80.                         nextBoard.pegs[i][j] = 0
  81.                         nextBoard.pegs[i-1][j] = 0
  82.                         nextBoard.pegs[i-2][j] = 1
  83.                         if nextBoard.solve():
  84.                             solution.append(self)
  85.                             return True  
  86.                     #down-left
  87.                     if (
  88.                     i+2 < len(self.pegs)
  89.                     and (self.pegs[i+1][j] == 1)
  90.                     and (self.pegs[i+2][j] == 0)
  91.                     ):
  92.                         nextBoard = self.clone()
  93.                         nextBoard.pegs[i][j] = 0
  94.                         nextBoard.pegs[i+1][j] = 0
  95.                         nextBoard.pegs[i+2][j] = 1
  96.                         if nextBoard.solve():
  97.                             solution.append(self)
  98.                             return True  
  99.                     #down-right
  100.                     if (
  101.                     i+2 < len(self.pegs)
  102.                     and (self.pegs[i+1][j+1] == 1)
  103.                     and (self.pegs[i+2][j+2] == 0)
  104.                     ):
  105.                         nextBoard = self.clone()
  106.                         nextBoard.pegs[i][j] = 0
  107.                         nextBoard.pegs[i+1][j+1] = 0
  108.                         nextBoard.pegs[i+2][j+2] = 1
  109.                         if nextBoard.solve():
  110.                             solution.append(self)
  111.                             return True  
  112.                     #left
  113.                     if (
  114.                     j >= 2
  115.                     and (self.pegs[i][j-1] == 1)
  116.                     and (self.pegs[i][j-2] == 0)
  117.                     ):
  118.                         nextBoard = self.clone()
  119.                         nextBoard.pegs[i][j] = 0
  120.                         nextBoard.pegs[i][j-1] = 0
  121.                         nextBoard.pegs[i][j-2] = 1
  122.                         if nextBoard.solve():
  123.                             solution.append(self)
  124.                             return True  
  125.                     #right
  126.                     if (
  127.                     j+2 < len(self.pegs[i])
  128.                     and (self.pegs[i][j+1] == 1)
  129.                     and (self.pegs[i][j+2] == 0)
  130.                     ):
  131.                         nextBoard = self.clone()
  132.                         nextBoard.pegs[i][j] = 0
  133.                         nextBoard.pegs[i][j+1] = 0
  134.                         nextBoard.pegs[i][j+2] = 1
  135.                         if nextBoard.solve():
  136.                             solution.append(self)
  137.                             return True  
  138.            
  139.         return False
  140.            
  141.  
  142. def main():                
  143.     board = Board()
  144.     board.printPegs()
  145.     print("pegs: " + str(board.sum()))
  146.     if board.solve():
  147.         print("Solvable")
  148.         solution.reverse()
  149.         print("-------------")
  150.         for board in solution:
  151.             board.printPegs()
  152.             print()
  153.     else:
  154.         print("Unsolvable")
  155.    
  156. startTime = time.time()
  157. main()
  158. print(str(time.time() - startTime) + " seconds")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement