Track
/
Roc
Roc
/
Esercizi
/
Attacco della regina
Attacco della regina

Attacco della regina

Facile

Istruzioni

Date le posizioni di due regine su una scacchiera, indica se sono posizionate in modo da potersi attaccare a vicenda.

Nel gioco degli scacchi, una regina può attaccare i pezzi che si trovano sulla stessa riga, colonna o diagonale.

Una scacchiera può essere rappresentata da un array 8 per 8.

Quindi, se ti viene detto che la regina bianca si trova in c5 (con indici a partire da zero: colonna 2, riga 3) e la regina nera in f2 (con indici a partire da zero: colonna 5, riga 6), allora sai che la disposizione è questa:

Una scacchiera con due regine. Le frecce che partono dalla regina in c5 indicano le possibili direzioni di cattura lungo colonna, traversa e diagonale.

Puoi anche rispondere se le regine possono attaccarsi a vicenda. In questo caso, la risposta sarebbe sì, possono, perché entrambi i pezzi condividono una diagonale.

Crediti

L'immagine della scacchiera è stata realizzata da habere-et-dispertire usando LaTeX ed il pacchetto chessboard di Ulrike Fischer.

Implementazione

Nel gioco degli scacchi, le righe si chiamano «rank» e le colonne «file». I rank vanno da 1 a 8, mentre i file vanno da A a H.

In questo esercizio, Square è un tipo opaco che rappresenta una casella di una scacchiera. Internamente usa i campi row e column indicizzati da 0, e garantisce che siano sempre validi (cioè da 0 a 7).

La funzione create prende in input una Str che rappresenta una casella valida sulla scacchiera usando la notazione ufficiale, come "C5". La funzione create deve analizzare questa Str, verificare che rappresenti una casella valida e, in tal caso, restituire un valore Square contenente i campi row e column appropriati. Il rank 1 corrisponde alla riga 0, ed il rank 8 corrisponde alla riga 7. Ad esempio, create("C5") deve restituire una casella con riga 4 e colonna 2.

Il tipo Square mette inoltre a disposizione i pratici metodi rank e file. Nell'esempio precedente, rank deve restituire l'intero 5, e file deve restituire il carattere 'C'.

Infine, la funzione queen_can_attack prende due valori Square diversi e controlla se le regine posizionate su queste caselle possono attaccarsi a vicenda oppure no.

Morale: i tipi opachi come Square sono ottimi quando vuoi offrire alcune garanzie, come il fatto che row e column siano sempre compresi tra 0 e 7. I tipi opachi nascondono anche i dettagli di implementazione agli utenti, il che rende l'API più pulita.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Roc Exercism

Vuoi iniziare Attacco della regina?

Iscriviti a Exercism per imparare e padroneggiare Roc con 120 esercizi e il mentoring di persone reali, tutto gratis.