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

Tell us what’s happening:

I am stuck on Step 31 of the “Learn Recursion by Solving the Tower of Hanoi Puzzle” lesson.

I believe I have followed the instructions correctly. As you can see in my code below, I’ve created the make_allowed_move function and am calling it from the first if block.

My code appears to be working. Despite this, the test repeatedly fails with the same error message. I tried so many times without success. Please help me out.

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):
    if not rods[rod2] or (rods[rod1] and rods[rod1][-1] < rods[rod2][-1]):
        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)

        elif remainder == 2:
            print(f'Move {i + 1} allowed between {source} and {auxiliary}')
            if not rods[auxiliary]:
                rods[auxiliary].append(rods[source].pop())
            elif rods[source] and rods[source][-1] < rods[auxiliary][-1]:
                rods[auxiliary].append(rods[source].pop())
            else:
                rods[source].append(rods[auxiliary].pop())

# User Editable Region

        else:
            print(f'Move {i + 1} allowed between {auxiliary} and {target}')
            if not rods[target]:
                rods[target].append(rods[auxiliary].pop())
            elif rods[auxiliary] and rods[auxiliary][-1] < rods[target][-1]:
                rods[target].append(rods[auxiliary].pop())
            else:
                rods[auxiliary].append(rods[target].pop())
    
    print(rods)

# 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/138.0.0.0 Safari/537.36

Challenge Information:

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

Hi @benzydad and welcome to our forum!

In the starting code for this step this is the first if statement:

if remainder == 1:
    print(f'Move {i + 1} allowed between {source} and {target}')
    forward = False
    if not rods[target]:
        forward = True
    elif rods[source] and rods[source][-1] < rods[target][-1]:
        forward = True
    if forward:
        print(f'Moving disk {rods[source][-1]} from {source} to {target}')
        rods[target].append(rods[source].pop())
    else:
        print(f'Moving disk {rods[target][-1]} from {target} to {source}')
        rods[source].append(rods[target].pop())

    # display our progress
    print(rods)

All of that nested code (except the first print command) should be moved into the other function.
I would hit the Reset button to restore the starting code and then try the step again.

it worked. Thank you.

1 Like

how did do it bro? for the life of me i cannot. please help!!!

hi @piyushkayastha2 , please create your own topic to ask your questions

If you have a question about a specific challenge as it relates to your written code for that challenge and need some help, click the Help button located on the challenge. This button only appears if you have tried to submit an answer at least three times.

The Help button will create a new topic with all code you have written and include a link to the challenge also. You will still be able to ask any questions in the post before submitting it to the forum.

Thank you.