Learn Recursion by Solving the Tower of Hanoi Puzzle - Step 31

Tell us what’s happening:

For the life of me I have no idea how to do this I’ve tried many different interpretations of the question and still it keeps coming back

Your code so far

NUMBER_OF_DISKS = 3
number_of_moves = 2**NUMBER_OF_DISKS - 1
rods = {
    'A': list(range(NUMBER_OF_DISKS, 0, -1)),
    'B': [],
    'C': []
}

# User Editable Region


def make_allowed_move(rod1, rod2):
    forward = False
    if not rods[rod2]:
        forward = True
    elif rods[rod1] and rods[rod1][-1] < rods[rod2][-1]:
        forward = True
    if forward:
        print(f'Moving disk {rods[rod1][-1]} from {rod1} to {rod2}')
        rods[rod2].append(rods[rod1].pop())
    else:
        print(f'Moving disk {rods[rod2][-1]} from {rod2} to {rod1}')
        rods[rod1].append(rods[rod2].pop())

def move(n, source, auxiliary, target):
    # display starting configuration
    print(rods)
    for i in range(number_of_moves):
        remainder = (i + 1) % 3
        if remainder == 1:
            print(f'Move {i + 1} allowed between {source} and {target}')
            make_allowed_move(source, target)
            # display our progress
            print(rods)
        elif remainder == 2:
            print(f'Move {i + 1} allowed between {source} and {auxiliary}')

# User Editable Region

        elif remainder == 0:
            print(f'Move {i + 1} allowed between {auxiliary} and {target}')

# initiate call from source A to target C with auxiliary B
move(NUMBER_OF_DISKS, 'A', 'B', 'C')

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36

Challenge Information:

Learn Recursion by Solving the Tower of Hanoi Puzzle - Step 31

Hi @olliechandler1234,

# display our progress
print(rods)

This is also part of the code block inside the if statement that was moved to the make_allowed_move() function.

make_allowed_move(source, target)

You should be safe removing this code.

I hope this helps. Happy coding!

2 Likes

Hey @ablairmorris and @olliechandler1234,

I was stuck on the same part and couldn’t get anything to work. I had to add pass after the last “elif” in the if statement nested in the for loop for the “move” function. My code was the same as Ollie’s but with the adjustments Blair suggested as well.

After getting the lesson to pass I compared the code the page set up on the next step. Looks like it is simply looking for you to move the exact code to the make_allowed_move fuction and not change the target and source variables to rod1 and rod2 yet. Those are the next steps.

2 Likes