Olá, estava fazendo um desafio para torre de hanoi que consiste em passar os discos da torre A para C sendo o total de 3 torres A, B e C e só pode mover um disco de cada vez e os discos sendo de diâmetros distintos nunca pode um disco com diâmetro maior ficar em cima do menor, segue uma exemplificação: http://www.texample.net/media/tikz/examples/PDF/towers-of-hanoi.pdf, mas me deparei com o seguinte problema: o programa deve receber a torre com disposições diferentes e reorganizá-los para uma torre definida, por exemplo ao receber A[4, 3, 2, 1] B[ ] C[ ] posso definir para o programa usando recursão reorganizar em C e no final ele chegar a A[ ] B [ ] C[4, 3, 2, 1] mas se eu receber por exemplo A[2, 1] B[4] C[3] e for reorganizar como posso fazer? Eu fiz o seguinte código usando ruby:
A = [4, 3, 2, 1]
B = []
C = []
def move(n, origem, destino, aux)
if n > 0
move(n - 1, origem, aux, destino)
destino << origem.pop
print A, B, C, "\n"
move(n - 1, aux, destino, origem)
end
end
move(4, A, C, B)
No caso estou usando 4 discos, e funciona quando eu tenho todos os discos dispostos todos em A, mas se for qualquer outra disposição deve ser feito de outra forma que não estou enxergando, a exemplo que já dei A[2, 1] B[4] C[3], pois dessa forma o programa já não atende. Sendo assim, como pode ser resolvido?