Soadreqm

jumpypegthing

Mar 13th, 2014
204
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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")
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×