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