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

hello, this seemed to be an easy task. nevertheless one im really struggling with. :sob:i cutted out the part until the print call for rods out of the move function as mentioned even though it felt a little bit odd for me to tear apart the nested structure. maybe i misunderstood everything again here being on the wrong track, not seeing the bigger picture or didnt got the exercise right…which could be the reason that i cant make the code pass even though i played around with that for pretty long now but not being able to find what i did wrong. other forum threads seemed not to help me either. im stuck here now for almost two days and start to feel REALLY stupid :face_with_spiral_eyes: :frowning: help is much appreciated.

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 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}')
            
        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 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36

Challenge Information:

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

Move the code nested inside the first if statement

It seems you moved all the code instead of only the one in the first if statement

1 Like

just to get this right- :slight_smile: this part until the “# display our progress” comment?
because i get that “You should move the code nested inside the first if statement (except the first print() call) to your new function.” note again if i do

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




1 Like

that, including the comment and the print below it

2 Likes

ok i tried that. unfortunately to no effect. its still saying " You should move the code nested inside the first if statement (except the first print() call) to your new function."
is there any indentation mistake i made here again? :see_no_evil:


def make_allowed_move(rod1, rod2):
    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)

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

everything needs to be indented correctly, use the forward = False as a guide on how the body of the function should be indented

2 Likes

checked again and got it now!! Thank you very much. me and the indentation arent the best pals obviously!

1 Like

Hey, thanks for the thread, I also was stuck here just now…

Honestly I think the tasks sometimes are not very clear, my opinion…

1 Like

Happy to hear that it helped you aswell! Could you solve it now?

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