class Hanoi:
	def __init__(self, diskNumber = 4):
		assert(diskNumber > 0)
		self.diskNumber = diskNumber
		self.towerA = Stack()
		self.towerB = Stack()
		self.towerC = Stack()
		for i in xrange(diskNumber):
			diskIndex = diskNumber - i
			self.towerA.push(diskIndex)

	def printTowers(self):
		towerA = self.towerA.bottomToTopList()
		towerB = self.towerB.bottomToTopList()
		towerC = self.towerC.bottomToTopList()
		for i in xrange(self.diskNumber):
			x = self.diskNumber - i -1
			printBuffer = ""
			printBuffer += str(towerA[x]) if x < len(towerA) else " " + "\t"
			printBuffer += str(towerB[x]) if x < len(towerB) else " " + "\t"
			printBuffer += str(towerC[x]) if x < len(towerC) else " "
			print printBuffer
		print "_\t_\t_"

	def play(self):
		self.moveTopNdisks(self.diskNumber, self.towerA, self.towerB, self.towerC)

	def moveTopNdisks(self, diskNumber, fromTower, middleTower, toTower):
		if diskNumber == 1:
			toTower.push(fromTower.pop())
		elif diskNumber == 2:
			# toTower.push(fromTower.pop())
			# middleTower.push(fromTower.pop())
			# fromTower.push(toTower.pop())
			# toTower.push(middleTower.pop())
			# toTower.push(fromTower.pop())
			middleTower.push(fromTower.pop())
			toTower.push(fromTower.pop())
			toTower.push(middleTower.pop())
		else:
			self.moveTopNdisks(diskNumber - 1, fromTower, middleTower, toTower)
			middleTower.push(fromTower.pop())
			self.moveTopNdisks(diskNumber - 1, toTower, middleTower, fromTower)
			toTower.push(middleTower.pop())
			self.moveTopNdisks(diskNumber - 1, fromTower, middleTower, toTower)
Esempio n. 2
0
def test():
	s = Stack()
	s.push(3)
	s.push(1)
	s.push(2)
	s.push(5)
	s.push(4)
	sortStack(s)

	expected = Stack()
	expected.push(1)
	expected.push(2)
	expected.push(3)
	expected.push(4)
	expected.push(5)

	print s.bottomToTopList()
	print expected.bottomToTopList()
	print "Passed" if s.bottomToTopList() == expected.bottomToTopList() else "Failed"

	s = Stack()
	s.push(5)
	s.push(4)
	s.push(3)
	s.push(2)
	s.push(1)
	sortStack(s)

	expected = Stack()
	expected.push(1)
	expected.push(2)
	expected.push(3)
	expected.push(4)
	expected.push(5)

	print s.bottomToTopList()
	print expected.bottomToTopList()
	print "Passed" if s.bottomToTopList() == expected.bottomToTopList() else "Failed"
def test():
    s = Stack()
    s.push(3)
    s.push(1)
    s.push(2)
    s.push(5)
    s.push(4)
    sortStack(s)

    expected = Stack()
    expected.push(1)
    expected.push(2)
    expected.push(3)
    expected.push(4)
    expected.push(5)

    print s.bottomToTopList()
    print expected.bottomToTopList()
    print "Passed" if s.bottomToTopList() == expected.bottomToTopList(
    ) else "Failed"

    s = Stack()
    s.push(5)
    s.push(4)
    s.push(3)
    s.push(2)
    s.push(1)
    sortStack(s)

    expected = Stack()
    expected.push(1)
    expected.push(2)
    expected.push(3)
    expected.push(4)
    expected.push(5)

    print s.bottomToTopList()
    print expected.bottomToTopList()
    print "Passed" if s.bottomToTopList() == expected.bottomToTopList(
    ) else "Failed"