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

Tell us what’s happening:

I changed the direction in the rods[source] and that of pop() to pop(1) but its not working

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

/* User Editable Region */

            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[source][1]} from {source} to {target}')
                rods[target].append(rods[source].pop(1))

/* 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 (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 27

I think in this step it’s also really important that you understand what the code means.

Last step we wrote rods[target].append(rods[source].pop())
What this did is move the disk from the target rod (rod A) to the source rod (rod C).

Now what the question wants, inside the else body is to move your source rod (rod C) to your target rod (Rod A).
You can do this using the same line you used in your if body, except you want to append to the source, and pop from the target. There shouldn’t be aby other changes.

1 Like

the target rod (rod A) to the source rod (rod C)

I thought the source rod is A and the target rod is C? :woozy_face:

rods[target].append(rods[source].pop())

Isn’t this “popping” data from the source rod and appending it to the target rod? If so, that’s not

move the disk from the target rod (rod A) to the source rod (rod C).

It’s moving the disk from the source rod to the target rod…

— removed solution code —

Hi, welcome to the forum.

It is great that you solved the challenge, but instead of posting your full working solution, it is best to stay focused on answering the original poster’s question(s) and help guide them with hints and suggestions to solve their own issues with the challenge.

We are trying to cut back on the number of spoiler solutions found on the forum and instead focus on helping other campers with their questions and definitely not posting full working solutions.