Oggi, nel nostro corso di programmazione in linguaggio C, ho deciso di mettere un po’ da parte la teoria per affrontare un problema classico: la Torre di Hanoi [00:06]. Questo problema, che consiste nello spostare un certo numero di dischi di dimensioni diverse da un piolo all’altro, seguendo regole specifiche: spostare un solo disco alla volta e non posizionare mai un disco più grande su uno più piccolo [01:36].
Abbiamo discusso come, dal punto di vista algoritmico, la Torre di Hanoi si presti particolarmente bene a una soluzione ricorsiva, che risulta molto più elegante e immediata rispetto a una iterativa [02:43]. Abbiamo poi delineato l’approccio ricorsivo, suddividendo il problema in sottoproblemi più semplici fino a raggiungere un caso base [02:59].
Successivamente, abbiamo iniziato a scrivere il codice in C utilizzando un ambiente di sviluppo online, definendo una funzione ricorsiva hanoi
che gestisce lo spostamento dei dischi tra i pioli di partenza, destinazione e temporaneo [07:08]. Abbiamo implementato il caso base, ovvero quando c’è un solo disco da spostare, e le chiamate ricorsive per i casi più complessi [08:19].
Per rendere la soluzione più interessante e visiva, ho deciso di utilizzare Webots, un simulatore di robot open source e multipiattaforma [14:34]. Introduciamo Webots, spiegando come creare un nuovo progetto, definire un ambiente tridimensionale e aggiungere oggetti solidi come i nostri dischi [18:13]. Abbiamo personalizzato i dischi, assegnando loro dimensioni e colori diversi [23:05].
Abbiamo poi associato il nostro codice C a un “robot” virtuale in Webots, che funge da controller per animare gli oggetti nel mondo 3D [27:07]. Abbiamo visto come inizializzare gli oggetti e posizionarli correttamente sulla scacchiera virtuale [32:44].
Infine, abbiamo implementato la logica per lo spostamento dei dischi, tenendo conto delle loro posizioni e altezze, e abbiamo aggiornato una matrice interna per tenere traccia della disposizione dei dischi sui pioli [44:57]. Abbiamo anche aggiunto un ritardo tra gli spostamenti per rendere l’animazione più visibile [58:17]. Per un tocco finale, abbiamo implementato un’animazione parabolica per lo spostamento dei dischi, rendendo il tutto più accattivante [01:04:46].