Dans cet exercice, on considère un carré (avec un trou) dans une grille, dont le côté est une puissance de 2, et des triominos pour le paver. Il est recommandé d'avoir fait l'exercice Triominos et pavage ; on utilisera le même codage des triominos.
Objectif
On souhaite obtenir un pavage d'un carré troué par des triominos.
Écrire une fonction pavage_triominos qui prend en paramètres
n : le côté d'un carré ; n sera une puissance de 2.
i_trou : la ligne du trou
j_trou : la colonne du trou
La fonction doit renvoyer une liste de triominos qui pave le carré troué. Chaque triomino est codé avec un tuple (i, j, sens) tel que défini dans l'exercice précédent ; i et j désignent la ligne et la colonne du carré central du triomino, et sens indique son orientation.
S'il est impossible d'obtenir un pavage, la fonction renverra None.
Dans cet exercice, on fournit et il sera possible d'utiliser la fonction est_pavage de l'exercice précédent pour vérifier votre pavage ; il n'est souvent pas unique. Tout pavage valide sera accepté.
Si le carré est une puissance de deux, on peut le couper en 4.
le petit carré qui contient le trou peut être pavé par récursivité.
pour les trois autres, on place un triomino commun, de sorte qu'il reste à paver un petit carré qui possède un trou à un coin.
Indice 2
Pour paver les trois autres carrés avec un trou dans un coin, on peut utiliser de la récursivité et un décalage sur le pavage obtenu.
Écrire chaque cas pourra s'avérer un peu long. Mais il est possible de factoriser le code, étudier le corrigé en ce sens.
Indice 3
On pourra utiliser le squelette de code
🐍 Script Python
defpavage_triominos(n,i_trou,j_trou):resultat=[]ifn==1:return...m=n//2ifi_trou<m:# le trou est en hautifj_trou<m:# le trou est à gauche...else:# le trou est à droite...else:# le trou est en bas......returnresultat
# Tests
(insensible à la casse)(Ctrl+I)