À partir de la position de deux dames sur un échiquier, indique si elles sont placées de manière à pouvoir s'attaquer l'une l'autre.
Au jeu d'échecs, une dame peut attaquer les pièces qui se trouvent sur la même rangée, la même colonne ou la même diagonale.
On peut représenter un échiquier par un tableau de 8 par 8.
Ainsi, si on te dit que la dame blanche se trouve en c5 (colonne 2, rangée 3, en comptant à partir de zéro) et la dame noire en f2 (colonne 5, rangée 6, en comptant à partir de zéro), tu sais alors que la disposition est la suivante :
Tu peux aussi déterminer si les dames peuvent s'attaquer l'une l'autre. Dans ce cas, la réponse serait oui, elles le peuvent, car les deux pièces partagent une diagonale.
L'image de l'échiquier a été réalisée par habere-et-dispertire avec LaTeX et le paquet chessboard d'Ulrike Fischer.
Aux échecs, les lignes s'appellent des « ranks » et les colonnes des « files ». Les ranks vont de 1 à 8, tandis que les files vont de A à H.
Dans cet exercice, Square est un type opaque qui représente une case d'un échiquier.
Il utilise en interne des champs row et column indexés à partir de 0, et il garantit qu'ils sont toujours valides (c'est-à-dire compris entre 0 et 7).
La fonction create prend une Str en entrée, représentant une case valide de l'échiquier en notation officielle, comme "C5".
La fonction create doit analyser cette Str, vérifier qu'elle représente bien une case valide et, si c'est le cas, renvoyer une valeur Square contenant les champs row et column appropriés.
Le rank 1 correspond à la ligne 0, et le rank 8 correspond à la ligne 7.
Par exemple, create("C5") doit renvoyer une case avec la ligne 4 et la colonne 2.
Le type Square expose aussi des méthodes rank et file bien pratiques.
Dans l'exemple ci-dessus, rank doit renvoyer l'entier 5, et file doit renvoyer le caractère 'C'.
Enfin, la fonction queen_can_attack prend deux valeurs Square différentes et vérifie si des dames placées sur ces cases peuvent ou non s'attaquer mutuellement.
À retenir : les types opaques comme Square sont très utiles quand on veut offrir certaines garanties, comme le fait que row et column sont toujours compris entre 0 et 7.
Les types opaques cachent aussi les détails d'implémentation aux utilisateurs, ce qui rend l'API plus propre.
Inscris-toi sur Exercism pour apprendre et maîtriser Roc avec 120 exercices, et un vrai mentorat humain, le tout gratuitement.