En utilisant uniquement 3 carrés collés sur un côté en forme de L (un triomino), on a 4 sens possibles d'orientation si on souhaite garder les côtés parallèles aux axes.
On peut alors paver, par exemple, un carré de côté 8, percé à la case ligne 5, colonne 4. On a utilisé 21 triominos.
Objectif
On souhaite paver presque entièrement une grille carrée de \(n\) lignes et \(n\) colonnes, indicées de \(0\) inclus à \(n\) exclu. Il y a juste un trou à la ligne i_trou, colonne j_trou qui n'est pas à paver. Il ne faut pas paver en dehors de la grille carrée.
Écrire une fonction est_pavage qui détermine si un pavage est correct ou non. On donne en paramètres :
n : le côté du carré
i_trou : la ligne du trou
j_trou : la colonne du trou
triominos : la liste des triominos
Un triomino est donné avec un tuple, (i, j, sens)
i désigne la ligne du carré central
j désigne la colonne du carré central
sens est l'orientation, selon le code indiqué plus haut ; un entier de 0 inclus à 4 exclu.
Par exemple, dans l'exemple au-dessus
(7, 7, 0) désigne le triomino vert en bas à droite
(7, 0, 1) désigne le triomino rouge en bas à gauche
(0, 1, 2) désigne le triomino jaune en haut à gauche
(6, 3, 3) désigne le triomino bleu en bas au milieu
Exemples
Un pavage valide d'un carré de côté 2 avec un trou en \((1, 1)\).
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)