Két vezér helyzete adott egy sakktáblán. Állapítsd meg, hogy állnak-e úgy, hogy meg tudják támadni egymást.
A sakkban a vezér azokat a bábukat tudja megtámadni, amelyek ugyanabban a sorban, oszlopban vagy átlóban vannak.
A sakktábla egy 8×8-as tömbbel ábrázolható.
Ha tehát azt mondják, hogy a fehér vezér a c5 mezőn áll (nullától indexelve a 2. oszlopban, a 3. sorban), a fekete vezér pedig az f2 mezőn (nullától indexelve az 5. oszlopban, a 6. sorban), akkor tudod, hogy az elrendezés így néz ki:
Arra is válaszolsz majd, hogy a vezérek meg tudják-e támadni egymást. Ebben az esetben a válasz igen, képesek rá, mert mindkét bábu ugyanabban az átlóban van.
A sakktábla képét habere-et-dispertire készítette LaTeX és Ulrike Fischer chessboard package csomagjának felhasználásával.
A sakkban a sorokat „rank”-nak, az oszlopokat „file”-nak nevezik. A „rank” 1-től 8-ig, a „file” pedig A-tól H-ig terjed.
Ebben a feladatban a Square egy opaque típus, amely a sakktábla egy mezőjét képviseli.
Belül 0-tól induló indexelésű row és column mezőket használ, és garantálja, hogy ezek mindig érvényesek (vagyis 0-tól 7-ig).
A create függvény bemenetként egy Str-et kap, amely a sakktábla egy érvényes mezőjét írja le a hivatalos jelöléssel, például "C5".
A create függvénynek fel kell dolgoznia ezt a Str-et, ellenőriznie kell, hogy érvényes mezőt ír-e le, és ha igen, egy Square értéket kell visszaadnia a megfelelő row és column mezőkkel.
Az 1-es „rank” a 0-s sornak, a 8-as „rank” a 7-es sornak felel meg.
Például a create("C5") hívásnak egy 4-es sorú és 2-es oszlopú mezőt kell visszaadnia.
A Square típus ezen kívül hasznos rank és file metódusokat is kínál.
A fenti példában a rank-nak az 5 egész számot, a file-nak pedig a 'C' karaktert kell visszaadnia.
Végül a queen_can_attack függvény két különböző Square értéket kap, és ellenőrzi, hogy az ezekre a mezőkre helyezett királynők tudják-e támadni egymást.
Tanulság: az olyan opaque típusok, mint a Square, remekül használhatók, ha garanciákat szeretnél nyújtani, például azt, hogy a row és a column mindig 0 és 7 között vannak.
Az opaque típusok emellett elrejtik a megvalósítás részleteit a felhasználók elől, amitől az API tisztább lesz.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Roc nyelvet 120 feladat segítségével, valódi emberi mentorálással, mindez ingyen.