• API
• FAQ
• Tools
• Archive
SHARE
TWEET # jumpypegthing Soadreqm  Mar 13th, 2014 186 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.                      ,
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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.
Top