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

Tell us what’s happening:

I don’t find mistake in my code, can someone help me find 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': []
}


def move(n, source, auxiliary, target):
    # display starting configuration
    print(rods)
    for i in range(number_of_moves):
        remainder = (i + 1) % 3
        
        print(f'Move {i + 1} allowed between {source} and {target}')
            
    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())
            


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

# User Editable Region

def make_allowed_move(rod1,rod2):
    if remainder == 1:    
        forward = False
    # display our progress
        print(rods)
    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}')

# User Editable Region

Your browser information:

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

Challenge Information:

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

I do not think, you should change the order of the functions, Reset the lesson then try again without changing the order.

but it still not pass

Let me see what you have after the adjustments.

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

the requirement is moving code nested inside the first if statement (except the first print() call) to my make_allowed_move function

The code you provided is not adjusted. Are you having a hard time identifying the code block to move?

If so, this is the code block to move.

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)