◆6WD5LB4sFVj5
-
Python,
pasted
on Jan 11:
|
# coding: utf8
"""
Tower of Hanoi Puzzle ver.2
author: ◆6WD5LB4sFVj5
date: 2011/01/12
"""
def moving(src, dest, work, discs):
if discs == 0: raise StopIteration()
for x in moving(src, work, dest, discs-1): yield x
yield (discs, src, dest)
for x in moving(work, dest, src, discs-1): yield x
class hanoi(object):
def __init__(self, discs, PEGS='ABC'):
self.pegs = [range(1,discs+1), [], []]
self.PEGS = PEGS
self.step = 0
def __repr__(self):
L = ['step -> %d' % (self.step)]
for name,peg in zip(self.PEGS, self.pegs):
L.append('%s : %s' % (name, peg))
return '\n'.join(L)
def move(self):
discs = len(self.pegs[0])
print self
for (_,src,dest) in moving(0, 2, 1, discs):
print
self.step += 1
n = self.pegs[src].pop(0)
self.pegs[dest].insert(0, n)
print self
hanoi(4).move()
|
Output:
|
step -> 0
A : [1, 2, 3, 4]
B : []
C : []
step -> 1
A : [2, 3, 4]
B : [1]
C : []
step -> 2
A : [3, 4]
B : [1]
C : [2]
step -> 3
A : [3, 4]
B : []
C : [1, 2]
step -> 4
A : [4]
B : [3]
C : [1, 2]
step -> 5
A : [1, 4]
B : [3]
C : [2]
step -> 6
A : [1, 4]
B : [2, 3]
C : []
step -> 7
A : [4]
B : [1, 2, 3]
C : []
step -> 8
A : []
B : [1, 2, 3]
C : [4]
step -> 9
A : []
B : [2, 3]
C : [1, 4]
step -> 10
A : [2]
B : [3]
C : [1, 4]
step -> 11
A : [1, 2]
B : [3]
C : [4]
step -> 12
A : [1, 2]
B : []
C : [3, 4]
step -> 13
A : [2]
B : [1]
C : [3, 4]
step -> 14
A : []
B : [1]
C : [2, 3, 4]
step -> 15
A : []
B : []
C : [1, 2, 3, 4]
|
|