Add towerOfHanoi.py
This commit is contained in:
commit
653a86c4bb
40
towerOfHanoi.py
Normal file
40
towerOfHanoi.py
Normal file
@ -0,0 +1,40 @@
|
||||
def printTowers(towers):
|
||||
"""Prints the current state of the towers."""
|
||||
max_height = max(len(rod) for rod in towers.values()) # Find the tallest stack
|
||||
for level in range(max_height, 0, -1):
|
||||
for rod in "ABC":
|
||||
if len(towers[rod]) >= level:
|
||||
print(f" {towers[rod][level - 1]} ", end=" ")
|
||||
else:
|
||||
print(" | ", end=" ")
|
||||
print()
|
||||
print(" A B C \n" + "-" * 10)
|
||||
|
||||
|
||||
def solveTowerOfHanoi(n, source, auxiliary, target, towers):
|
||||
if n == 0: # edge case if user wants a tower of 0
|
||||
return
|
||||
if n == 1: # last one
|
||||
disk = towers[source].pop() # Remove top disk from source and move to target
|
||||
towers[target].append(disk)
|
||||
print(f"Disk {disk}: {source} -> {target}")
|
||||
printTowers(towers)
|
||||
return
|
||||
|
||||
solveTowerOfHanoi(n - 1, source, target, auxiliary, towers)
|
||||
disk = towers[source].pop()
|
||||
towers[target].append(disk)
|
||||
print(f"Disk {disk}: {source} -> {target}")
|
||||
printTowers(towers)
|
||||
|
||||
solveTowerOfHanoi(n - 1, auxiliary, source, target, towers)
|
||||
|
||||
|
||||
# Works with both even and odd number
|
||||
num_disks = 5
|
||||
towers = {"A": list(range(num_disks, 0, -1)), "B": [], "C": []}
|
||||
|
||||
print("Starting state:")
|
||||
printTowers(towers)
|
||||
|
||||
solveTowerOfHanoi(num_disks, "A", "B", "C", towers)
|
Loading…
x
Reference in New Issue
Block a user