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

Tell us what’s happening:

Describe your issue in detail here.
shouldnt this if statement execute when odd? i could be overlooking an error somewhere else in the problem

Your code so far

NUMBER_OF_DISKS = 4
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, '\n')

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

/* User Editable Region */

            else:
                print(f'Move {i + 1} allowed between {source} and {auxiliary}')
                # make_allowed_move(source, auxiliary)            

        elif remainder == 2:
            if n % 2 != 0:
                print(f'Move {i + 1} allowed between {source} and {auxiliary}')
                # make_allowed_move(source, auxiliary)


/* User Editable Region */

        elif remainder == 0:
            print(f'Move {i + 1} allowed between {auxiliary} and {target}')
            make_allowed_move(auxiliary, 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/120.0.0.0 Safari/537.36

Challenge Information:

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

You appear to have created this post without editing the template. Please edit your post to Tell us what’s happening in your own words.

Hello rqzcnm,

Yes your if statement is correct, but you have to uncomment both of the make_allowed_move function calls.

2 Likes

holy sh*t . thanks. I already got a headache but turned out I just read
“Also, turn the # make_allowed_move(source, auxiliary) comment into code”
as
“Also, turn the # make_allowed_move(source, auxiliary) into a comment.”
all the time.

2 Likes

Hahaha it happens! Don’t worry about it :blush:

You need to add “else statement” even is not in demand!

same XD I just forgot to read

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