Instruções
Implementar o Algoritmo da Torre de Hanoi
Neste laboratório, você resolverá o quebra-cabeça matemático conhecido como a Torre de Hanói. O quebra-cabeça consiste em três hastes e um número de discos de diferentes diâmetros.
<img alt="sequence of moves required to solve a 3-disks tower of Hanoi puzzle" src="https://cdn.G.E.A.R ACADEMY.org/curriculum/python/tower-of-hanoi.gif" style="background-color: white; height: 350px; width: auto; padding: 15px; display: block; margin-right: auto; margin-left: auto; margin-bottom: 1.2rem;">
O quebra-cabeça começa com os discos empilhados no primeiro pino, em tamanho decrescente, com o disco menor no topo e o disco maior na base.
O objetivo do quebra-cabeça Torre de Hanói é mover todos os discos para o último pino. Para fazer isso, você deve seguir três regras simples:
- Você pode mover apenas os discos mais superiores.
- Você pode mover apenas um disco por vez.
- Você não pode colocar discos maiores sobre discos menores.
hanoi_solver que recebe um inteiro representando o número total de discos do quebra-cabeça como argumento.
1. A função hanoi_solver deve resolver o quebra-cabeça seguindo as regras dadas em 2<sup>n</sup> - 1 movimentos, onde n é o número total de discos.
1. A função hanoi_solver deve retornar uma string com todos os movimentos realizados para resolver o quebra-cabeça, incluindo a disposição inicial, com cada movimento em uma nova linha. As hastes devem ser representadas como listas de inteiros, (o menor disco é representado pelo número 1) com cada haste separada por um espaço. Por exemplo, hanoi_solver(3) deve retornar o seguinte:
[3, 2, 1] [] []
[3, 2] [] [1]
[3] [2] [1]
[3] [2, 1] []
[] [2, 1] [3]
[1] [2] [3]
[1] [] [3, 2]
[] [] [3, 2, 1]
O que fazer:
Testes:
- Você deve ter uma função chamada `hanoi_solver`.
- Sua função `hanoi_solver` deve receber um único argumento.
- Sua função `hanoi_solver` deve retornar uma string.
- `hanoi_solver(2)` deve retornar `[2, 1] [] []\n[2] [1] []\n[] [1] [2]\n[] [] [2, 1]`.
- `hanoi_solver(3)` deve retornar `[3, 2, 1] [] []\n[3, 2] [] [1]\n[3] [2] [1]\n[3] [2, 1] []\n[] [2, 1] [3]\n[1] [2] [3]\n[1] [] [3, 2]\n[] [] [3, 2, 1]`.
- `hanoi_solver(4)` deve retornar `[4, 3, 2, 1] [] []\n[4, 3, 2] [1] []\n[4, 3] [1] [2]\n[4, 3] [] [2, 1]\n[4] [3] [2, 1]\n[4, 1] [3] [2]\n[4, 1] [3, 2] []\n[4] [3, 2, 1] []\n[] [3, 2, 1] [4]\n[] [3, 2] [4, 1]\n[2] [3] [4, 1]\n[2, 1] [3] [4]\n[2, 1] [] [4, 3]\n[2] [1] [4, 3]\n[] [1] [4, 3, 2]\n[] [] [4, 3, 2, 1]`.
- `hanoi_solver(5)` deve retornar `[5, 4, 3, 2, 1] [] []\n[5, 4, 3, 2] [] [1]\n[5, 4, 3] [2] [1]\n[5, 4, 3] [2, 1] []\n[5, 4] [2, 1] [3]\n[5, 4, 1] [2] [3]\n[5, 4, 1] [] [3, 2]\n[5, 4] [] [3, 2, 1]\n[5] [4] [3, 2, 1]\n[5] [4, 1] [3, 2]\n[5, 2] [4, 1] [3]\n[5, 2, 1] [4] [3]\n[5, 2, 1] [4, 3] []\n[5, 2] [4, 3] [1]\n[5] [4, 3, 2] [1]\n[5] [4, 3, 2, 1] []\n[] [4, 3, 2, 1] [5]\n[1] [4, 3, 2] [5]\n[1] [4, 3] [5, 2]\n[] [4, 3] [5, 2, 1]\n[3] [4] [5, 2, 1]\n[3] [4, 1] [5, 2]\n[3, 2] [4, 1] [5]\n[3, 2, 1] [4] [5]\n[3, 2, 1] [] [5, 4]\n[3, 2] [] [5, 4, 1]\n[3] [2] [5, 4, 1]\n[3] [2, 1] [5, 4]\n[] [2, 1] [5, 4, 3]\n[1] [2] [5, 4, 3]\n[1] [] [5, 4, 3, 2]\n[] [] [5, 4, 3, 2, 1]`.
- `hanoi_solver(n)` deve resolver o quebra-cabeça da torre de Hanoi para qualquer valor positivo de `n`.
Preview