Cette variante est un mélange entre d'une part les tours séparées et interclassées, et d'autre part les tours linéaires. Nous avons deux piles de disques, et trois piquets. Il faut inverser la position des piles en respectant les règles de mouvement habituelles des tours de Hanoï (un seul disque à la fois, et pas de grand disque sur les petits disques) ainsi que les restrictions du mouvement linéaire (pas d'échange direct entre les piquets des extrémités).
Vous aurez besoin de trois fonctions récursives :
Dans rassemble()
, l'appel récursif vient avant deux appels à
deplaceInterclassee
tandis que dans repartis()
les
appels à deplaceInterclassee
arrivent avant l'appel
récursif. La fonction principale que vous devez écrire n'est pas récursive,
mais rassemble simplement la plupart des disques, déplace les disques
restants, puis répartit de nouveau les petits disques.
La linéarité ajoute certainement un peu de complexité puisqu'il faut décomposer tous les mouvements entre les piquets n°0 et n°2, mais je reste confiant dans votre capacité à résoudre cette épreuve :)
Remarquez que l'algorithme demandé a été prouvé optimal pour ce problème. Il n'est donc pas utile aujourd'hui de chercher à optimiser plus que demandé.