[ create a new paste ] login | about

Link: http://codepad.org/eyLm0tzd    [ raw code | output | fork ]

◆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]


Create a new paste based on this one


Comments: