From 653a86c4bb3c1cf68bc5af96c64f0e712258af42 Mon Sep 17 00:00:00 2001 From: aidan Date: Sun, 23 Feb 2025 22:04:14 -0500 Subject: [PATCH] Add towerOfHanoi.py --- towerOfHanoi.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 towerOfHanoi.py diff --git a/towerOfHanoi.py b/towerOfHanoi.py new file mode 100644 index 0000000..0778041 --- /dev/null +++ b/towerOfHanoi.py @@ -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)