Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- List comprehension solve of Hanoi puzzle
- by Troy J. Watson
- Sat Mar 21 11:31:24 AEDT 2015
- '''
- class Hanoi(object):
- def __init__(self, diskNum = 3, pole = 1, n = 8):
- self.diskNum = diskNum
- self.pole = pole
- self.n = n
- self.moves = 2**n-1
- self.startup = 2**(self.diskNum-1)-1
- self.blocksize = 2**diskNum
- self.blocknum = (self.moves - self.startup) / self.blocksize
- self.totalWithoutEnd = self.startup + (self.blocknum * self.blocksize)
- self.leftover = self.moves - self.totalWithoutEnd
- self.finalList = []
- def printData(self):
- print 'moves ', self.moves
- print 'startup ', self.startup
- print 'blocksize ', self.blocksize
- print 'blocknum ', self.blocknum
- print 'totalwithoutend ', self.totalWithoutEnd
- print 'leftover ', self.leftover
- def head(self):
- self.pole = 1
- self.finalList = self.finalList + [self.pole for x in xrange(self.startup)]
- self.movePole()
- def isEven(self, num): return (num%2) == 0
- def movePole(self):
- if (self.isEven(self.n)):
- if (not(self.isEven(self.diskNum))):
- if (self.pole < 3): self.pole = self.pole + 1
- else: self.pole = 1
- else:
- if (self.pole > 1): self.pole = self.pole -1
- else: self.pole = 3
- else:
- if (not(self.isEven(self.diskNum))):
- if (self.pole > 1): self.pole = self.pole -1
- else: self.pole = 3
- else:
- if (self.pole < 3): self.pole = self.pole + 1
- else: self.pole = 1
- def body(self):
- if (self.blocknum > 0):
- for i in xrange(self.blocknum):
- self.finalList = self.finalList + [self.pole for x in xrange(self.blocksize)]
- self.movePole()
- def tail(self):
- if (self.leftover > 0):
- self.finalList = self.finalList + [self.pole for x in xrange(self.leftover)]
- def calculate(self):
- self.head()
- self.body()
- self.tail()
- self.displayList()
- def displayList(self): print self.finalList
- def main():
- hanoi = Hanoi(1, 1, 5); print 'disk 1'; hanoi.calculate()
- hanoi2 = Hanoi(2, 1, 5); print 'disk 2'; hanoi2.calculate()
- hanoi3 = Hanoi(3, 1, 5); print 'disk 3'; hanoi3.calculate()
- hanoi4 = Hanoi(4, 1, 5); print 'disk 4'; hanoi4.calculate()
- hanoi5 = Hanoi(5, 1, 5); print 'disk 5'; hanoi5.calculate()
- #print hanoi.printData()
- if __name__ == '__main__':main()
Advertisement
Add Comment
Please, Sign In to add comment