Gegeben sind die Positionen zweier Damen auf einem Schachbrett. Gib an, ob sie so stehen, dass sie sich gegenseitig angreifen können.
Im Schach kann eine Dame Figuren angreifen, die in derselben Zeile, Spalte oder Diagonale stehen.
Ein Schachbrett kann durch ein 8x8-Array dargestellt werden.
Wenn dir also gesagt wird, dass die weiße Dame auf c5 steht (nullbasiert: Spalte 2, Zeile 3) und die schwarze Dame auf f2 (nullbasiert: Spalte 5, Zeile 6), dann weißt du, dass der Aufbau so aussieht:
Du kannst auch beantworten, ob sich die beiden Damen gegenseitig angreifen können. In diesem Fall wäre die Antwort ja, sie können, weil beide Figuren auf derselben Diagonale stehen.
Das Bild des Schachbretts wurde von habere-et-dispertire mit LaTeX und dem chessboard-Paket von Ulrike Fischer erstellt.
Im Schach heißen Reihen „Ranks“ und Spalten „Files“. Ranks reichen von 1 bis 8, Files von A bis H.
In dieser Übung ist Square ein opaker Typ, der ein Feld auf einem Schachbrett repräsentiert.
Intern verwendet Square die 0-indizierten Felder row und column und garantiert, dass diese immer gültig sind (d. h. von 0 bis 7).
Die Funktion create nimmt einen Str als Eingabe entgegen, der ein gültiges Feld auf dem Schachbrett in der offiziellen Notation darstellt, zum Beispiel "C5".
Die Funktion create muss diesen Str parsen und überprüfen, ob er ein gültiges Feld darstellt; wenn ja, muss sie einen Square-Wert zurückgeben, der die passenden Felder row und column enthält.
Rank 1 entspricht row 0, und Rank 8 entspricht row 7.
Zum Beispiel muss create("C5") ein Feld mit row 4 und column 2 zurückgeben.
Der Typ Square stellt außerdem praktische Methoden rank und file bereit.
Im obigen Beispiel muss rank die Ganzzahl 5 zurückgeben und file das Zeichen 'C'.
Schließlich nimmt die Funktion queen_can_attack zwei verschiedene Square-Werte entgegen und prüft, ob Damen, die auf diesen Feldern stehen, sich gegenseitig angreifen können oder nicht.
Fazit: Opake Typen wie Square sind großartig, wenn du einige Garantien bieten möchtest, zum Beispiel die Tatsache, dass row und column immer zwischen 0 und 7 liegen.
Opake Typen verbergen außerdem Implementierungsdetails vor den Nutzern, was die API sauberer macht.
Melde dich bei Exercism an, um Roc mit 120 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.