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

Tell us what’s happening:

I’m stuck on a Tower of Hanoi step: “Move the code nested inside the first if statement (except the first print) to your new function.” I made make_allowed_move() and moved the forward logic, disk moves, and print(rods) into it. In move(), inside if remainder == 1:, I left only the first print(). But the checker still reports the same error. Could this be indentation, moving the wrong block, or the platform expecting an exact structure?

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):
    pass

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}')
            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)

# User Editable Region

        elif remainder == 2:
            print(f'Move {i + 1} allowed between {source} and {auxiliary}')
        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/144.0.0.0 Safari/537.36

Challenge Information:

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

Does not look like you moved anything?

You may need to fix the indentation after copy/pasting

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

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())


# display our progress
print(rods)


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}’)
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’)

I’ve edited your post to improve the readability of the code. Unfortunately the indentation was not preserved.

When you enter a code block into a forum post, please precede it with three backticks to make it easier to read.

You can also use the “preformatted text” tool in the editor (</>) to add the backticks.

See this post to find the backtick on your keyboard.
Note: Backticks (`) are not single quotes (').

Looks like you’ve moved the correct code here.

How does the indentation look?

Are there any error messages in the console?

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.