fork download
  1. class Hanoi_Tower:
  2.  
  3. def __init__(self, Disks):
  4. self.Disks = Disks
  5. self.N = len(Disks)
  6. self.D = dict()
  7. self.N0 = self.N*'- '
  8. self.Towers = 'ABC'
  9. for t in self.Towers: self.D[t] = list()
  10. self.D['A'] = [ d for d in Disks ]
  11.  
  12. def move_disk(self, target, goal):
  13. t1 = self.D[target]
  14. t2 = self.D[goal]
  15. disk = t1.pop()
  16. t2.append(disk)
  17. self.D[target] = t1
  18. self.D[ goal ] = t2
  19. print('Move Disk %c from %c to %c' % (disk, target, goal))
  20. self.show()
  21.  
  22. def show(self):
  23. print()
  24. for t in self.Towers:
  25. tower = ' '.join(self.D[t])
  26. if len(tower) == 1: tower = tower + ' '
  27. tower_H = tower + self.N0[len(tower):]
  28. print("Tower %c : %s" % (t, tower_H))
  29. print('='*30)
  30.  
  31. def move(self, target = 'A', goal = 'B', aux = 'C', n = None):
  32. if n == 0: return
  33. elif n is None: n = self.N
  34. self.move(target, aux, goal, n-1)
  35. self.move_disk(target, goal)
  36. self.move(aux, goal, target, n-1)
  37.  
  38. HT = Hanoi_Tower('Xx*@Oo')
  39. HT.show()
  40. HT.move()
  41.  
Success #stdin #stdout 0.02s 8736KB
stdin
Standard input is empty
stdout
Tower A : X x * @ O o 
Tower B : - - - - - - 
Tower C : - - - - - - 
==============================
Move Disk o from A to C

Tower A : X x * @ O - 
Tower B : - - - - - - 
Tower C : o - - - - - 
==============================
Move Disk O from A to B

Tower A : X x * @ - - 
Tower B : O - - - - - 
Tower C : o - - - - - 
==============================
Move Disk o from C to B

Tower A : X x * @ - - 
Tower B : O o - - - - 
Tower C : - - - - - - 
==============================
Move Disk @ from A to C

Tower A : X x * - - - 
Tower B : O o - - - - 
Tower C : @ - - - - - 
==============================
Move Disk o from B to A

Tower A : X x * o - - 
Tower B : O - - - - - 
Tower C : @ - - - - - 
==============================
Move Disk O from B to C

Tower A : X x * o - - 
Tower B : - - - - - - 
Tower C : @ O - - - - 
==============================
Move Disk o from A to C

Tower A : X x * - - - 
Tower B : - - - - - - 
Tower C : @ O o - - - 
==============================
Move Disk * from A to B

Tower A : X x - - - - 
Tower B : * - - - - - 
Tower C : @ O o - - - 
==============================
Move Disk o from C to B

Tower A : X x - - - - 
Tower B : * o - - - - 
Tower C : @ O - - - - 
==============================
Move Disk O from C to A

Tower A : X x O - - - 
Tower B : * o - - - - 
Tower C : @ - - - - - 
==============================
Move Disk o from B to A

Tower A : X x O o - - 
Tower B : * - - - - - 
Tower C : @ - - - - - 
==============================
Move Disk @ from C to B

Tower A : X x O o - - 
Tower B : * @ - - - - 
Tower C : - - - - - - 
==============================
Move Disk o from A to C

Tower A : X x O - - - 
Tower B : * @ - - - - 
Tower C : o - - - - - 
==============================
Move Disk O from A to B

Tower A : X x - - - - 
Tower B : * @ O - - - 
Tower C : o - - - - - 
==============================
Move Disk o from C to B

Tower A : X x - - - - 
Tower B : * @ O o - - 
Tower C : - - - - - - 
==============================
Move Disk x from A to C

Tower A : X - - - - - 
Tower B : * @ O o - - 
Tower C : x - - - - - 
==============================
Move Disk o from B to A

Tower A : X o - - - - 
Tower B : * @ O - - - 
Tower C : x - - - - - 
==============================
Move Disk O from B to C

Tower A : X o - - - - 
Tower B : * @ - - - - 
Tower C : x O - - - - 
==============================
Move Disk o from A to C

Tower A : X - - - - - 
Tower B : * @ - - - - 
Tower C : x O o - - - 
==============================
Move Disk @ from B to A

Tower A : X @ - - - - 
Tower B : * - - - - - 
Tower C : x O o - - - 
==============================
Move Disk o from C to B

Tower A : X @ - - - - 
Tower B : * o - - - - 
Tower C : x O - - - - 
==============================
Move Disk O from C to A

Tower A : X @ O - - - 
Tower B : * o - - - - 
Tower C : x - - - - - 
==============================
Move Disk o from B to A

Tower A : X @ O o - - 
Tower B : * - - - - - 
Tower C : x - - - - - 
==============================
Move Disk * from B to C

Tower A : X @ O o - - 
Tower B : - - - - - - 
Tower C : x * - - - - 
==============================
Move Disk o from A to C

Tower A : X @ O - - - 
Tower B : - - - - - - 
Tower C : x * o - - - 
==============================
Move Disk O from A to B

Tower A : X @ - - - - 
Tower B : O - - - - - 
Tower C : x * o - - - 
==============================
Move Disk o from C to B

Tower A : X @ - - - - 
Tower B : O o - - - - 
Tower C : x * - - - - 
==============================
Move Disk @ from A to C

Tower A : X - - - - - 
Tower B : O o - - - - 
Tower C : x * @ - - - 
==============================
Move Disk o from B to A

Tower A : X o - - - - 
Tower B : O - - - - - 
Tower C : x * @ - - - 
==============================
Move Disk O from B to C

Tower A : X o - - - - 
Tower B : - - - - - - 
Tower C : x * @ O - - 
==============================
Move Disk o from A to C

Tower A : X - - - - - 
Tower B : - - - - - - 
Tower C : x * @ O o - 
==============================
Move Disk X from A to B

Tower A : - - - - - - 
Tower B : X - - - - - 
Tower C : x * @ O o - 
==============================
Move Disk o from C to B

Tower A : - - - - - - 
Tower B : X o - - - - 
Tower C : x * @ O - - 
==============================
Move Disk O from C to A

Tower A : O - - - - - 
Tower B : X o - - - - 
Tower C : x * @ - - - 
==============================
Move Disk o from B to A

Tower A : O o - - - - 
Tower B : X - - - - - 
Tower C : x * @ - - - 
==============================
Move Disk @ from C to B

Tower A : O o - - - - 
Tower B : X @ - - - - 
Tower C : x * - - - - 
==============================
Move Disk o from A to C

Tower A : O - - - - - 
Tower B : X @ - - - - 
Tower C : x * o - - - 
==============================
Move Disk O from A to B

Tower A : - - - - - - 
Tower B : X @ O - - - 
Tower C : x * o - - - 
==============================
Move Disk o from C to B

Tower A : - - - - - - 
Tower B : X @ O o - - 
Tower C : x * - - - - 
==============================
Move Disk * from C to A

Tower A : * - - - - - 
Tower B : X @ O o - - 
Tower C : x - - - - - 
==============================
Move Disk o from B to A

Tower A : * o - - - - 
Tower B : X @ O - - - 
Tower C : x - - - - - 
==============================
Move Disk O from B to C

Tower A : * o - - - - 
Tower B : X @ - - - - 
Tower C : x O - - - - 
==============================
Move Disk o from A to C

Tower A : * - - - - - 
Tower B : X @ - - - - 
Tower C : x O o - - - 
==============================
Move Disk @ from B to A

Tower A : * @ - - - - 
Tower B : X - - - - - 
Tower C : x O o - - - 
==============================
Move Disk o from C to B

Tower A : * @ - - - - 
Tower B : X o - - - - 
Tower C : x O - - - - 
==============================
Move Disk O from C to A

Tower A : * @ O - - - 
Tower B : X o - - - - 
Tower C : x - - - - - 
==============================
Move Disk o from B to A

Tower A : * @ O o - - 
Tower B : X - - - - - 
Tower C : x - - - - - 
==============================
Move Disk x from C to B

Tower A : * @ O o - - 
Tower B : X x - - - - 
Tower C : - - - - - - 
==============================
Move Disk o from A to C

Tower A : * @ O - - - 
Tower B : X x - - - - 
Tower C : o - - - - - 
==============================
Move Disk O from A to B

Tower A : * @ - - - - 
Tower B : X x O - - - 
Tower C : o - - - - - 
==============================
Move Disk o from C to B

Tower A : * @ - - - - 
Tower B : X x O o - - 
Tower C : - - - - - - 
==============================
Move Disk @ from A to C

Tower A : * - - - - - 
Tower B : X x O o - - 
Tower C : @ - - - - - 
==============================
Move Disk o from B to A

Tower A : * o - - - - 
Tower B : X x O - - - 
Tower C : @ - - - - - 
==============================
Move Disk O from B to C

Tower A : * o - - - - 
Tower B : X x - - - - 
Tower C : @ O - - - - 
==============================
Move Disk o from A to C

Tower A : * - - - - - 
Tower B : X x - - - - 
Tower C : @ O o - - - 
==============================
Move Disk * from A to B

Tower A : - - - - - - 
Tower B : X x * - - - 
Tower C : @ O o - - - 
==============================
Move Disk o from C to B

Tower A : - - - - - - 
Tower B : X x * o - - 
Tower C : @ O - - - - 
==============================
Move Disk O from C to A

Tower A : O - - - - - 
Tower B : X x * o - - 
Tower C : @ - - - - - 
==============================
Move Disk o from B to A

Tower A : O o - - - - 
Tower B : X x * - - - 
Tower C : @ - - - - - 
==============================
Move Disk @ from C to B

Tower A : O o - - - - 
Tower B : X x * @ - - 
Tower C : - - - - - - 
==============================
Move Disk o from A to C

Tower A : O - - - - - 
Tower B : X x * @ - - 
Tower C : o - - - - - 
==============================
Move Disk O from A to B

Tower A : - - - - - - 
Tower B : X x * @ O - 
Tower C : o - - - - - 
==============================
Move Disk o from C to B

Tower A : - - - - - - 
Tower B : X x * @ O o 
Tower C : - - - - - - 
==============================