Aller au contenu

Affichage simple⚓︎

Améliorer l'affichage

L'affichage actuel est minimaliste. Nous allons créer de nouvelles fonctions permettant d'avoir un affichage plus lisible.

Pour cela, il va falloir transformer le plateau en une matrice, c'est-à-dire un tableau de tableaux. Chaque sous-tableau correspond à une pile, le fond étant à gauche et le sommet à droite.

Chaque sous-tableau a autant de valeurs qu'il y a de disques. Lorsqu'il n'y a pas tous les disques sur une pile, les emplacements vides sont représentés par des 0.

Par exemple, la matrice ci-dessous correspond à ce plateau.

tab = [[5, 2, 0, 0, 0],
       [4, 3, 1, 0, 0],
       [0, 0, 0, 0, 0]]
Exercice 8

Compléter le code de la fonction pile_vers_tableau qui prend en paramètres une pile pile et un entier n, et qui renvoie un tableau de n valeurs correspondant à la pile.

>>> pile = pile_vide()
>>> empile(pile, 4)
>>> empile(pile, 3)
>>> empile(pile, 1)
>>> pile_vers_tableau(pile, 5)
[4, 3, 1, 0, 0]

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /∞

Exercice 9

Compléter le code de la fonction plateau_vers_matrice qui prend en paramètre un plateau et renvoie la matrice correspondant.

Indice

Le nombre de disques correspond à la somme des tailles des piles.

>>> plateau = nouvelle_partie(5)
>>> deplace_1_disque(plateau[0], plateau[1])
>>> deplace_1_disque(plateau[0], plateau[2])
>>> print(plateau)
3/4/5  1  2
>>> plateau_vers_matrice(plateau)
[[5, 4, 3, 0, 0], [1, 0, 0, 0, 0], [2, 0, 0, 0, 0]]

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /∞

Exercice 10

Compléter le code de la fonction affiche_matrice qui prend en paramètre une matrice et qui affiche les piles correspndant à cette matrice. Les 0 sont remplacés par des | et les autres nombres sont affichés.

>>> matrice = [[5, 4, 3, 0, 0], [1, 0, 0, 0, 0], [2, 0, 0, 0, 0]]
>>> affiche_matrice(matrice)
| | |
| | |
3 | |
4 | |
5 1 2

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /∞

Exercice 11

Compléter le code de la fonction affiche_plateau qui prend en paramètre un plateau et qui affiche le plateau. Il faut utiliser les fonctions précédentes.

>>> plateau = nouvelle_partie(5)
>>> deplace_1_disque(plateau[0], plateau[1])
>>> deplace_1_disque(plateau[0], plateau[2])
>>> afiche_plateau(plateau)
 | | |
 | | |
 3 | |
 4 | |
 5 1 2
=======

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /∞

Exercice 12 (bonus)

En modifiant certaines des fonctions précédentes, rajouter un affichage à chaque déplacement de disque sur le plateau.

Si vous avez besoin de retrouver le plateau à partir d'une pile, vous pouvez utiliser la fonction plateau_de qui est déjà définie et qui est telle que plateau_de(pile) qui renvoie le plateau sur lequel se trouve pile.

Il peut être intéressant de sauter une ligne avant d'afficher le plateau. Vous pouvez le faire en rajoutant l'instruction print() au bon endroit.

Vous pouvez également rajouter une pause avec l'instruction sleep(0.5). La valeur correspond à la durée de la pause, en secondes.

>>> plateau = nouvelle_partie(2)
>>> resolution(plateau)
 1 | |
 2 | |
=======

 | | |
 2 1 |
=======

 | | |
 | 1 2
=======

 | | 1
 | | 2
=======
Exercice 13 (bonus)

Écrire une fonction affichage_complexe qui prend en paramètre une matrice et qui l'affiche de la manière suivante :

>>> affichage_complexe([[5, 4, 3, 2, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])
    ===         |          |     
   =====        |          |     
  =======       |          |     
 =========      |          |     
===========     |          | 
>>> affichage_complexe([[5, 4, 0, 0, 0], [3, 2, 0, 0, 0], [1, 0, 0, 0, 0]])
     |          |          |     
     |          |          |     
     |          |          |     
 =========    =====        |     
===========  =======      ===

Le disque de taille k est représenté par une chaîne de 2k+1 symboles '='. Chaque pile occupe 2n+1 colonnes, avec n le nombre total de disques. Les parties des tiges sans disques sont toujours représentées par '|'.

Vous pouvez écrire des fonctions supplémentaires pour vous aider.