Percursos
/
Roc
Roc
/
Exercícios
/
Ataque da rainha
Ataque da rainha

Ataque da rainha

Fácil

Instruções

Dadas as posições de duas rainhas num tabuleiro de xadrez, indica se estão posicionadas de forma a poderem atacar-se uma à outra.

No jogo de xadrez, uma rainha pode atacar peças que estejam na mesma linha, coluna ou diagonal.

Um tabuleiro de xadrez pode ser representado por um array 8 por 8.

Assim, se te disserem que a rainha branca está em c5 (indexado a zero na coluna 2, linha 3) e a rainha preta em f2 (indexado a zero na coluna 5, linha 6), então sabes que a disposição é a seguinte:

Um tabuleiro de xadrez com duas rainhas. As setas que partem da rainha em c5 indicam as direções possíveis de captura ao longo da coluna, da linha e da diagonal.

Também consegues responder se as rainhas se podem atacar uma à outra. Neste caso, a resposta seria sim, podem, porque ambas as peças partilham uma diagonal.

Créditos

A imagem do tabuleiro de xadrez foi feita por habere-et-dispertire com LaTeX e o pacote chessboard de Ulrike Fischer.

Implementação

No xadrez, as linhas chamam-se "filas" e as colunas chamam-se "colunas". As filas vão de 1 a 8, enquanto as colunas vão de A a H.

Neste exercício, Square é um tipo opaco que representa uma casa de um tabuleiro de xadrez. Internamente, usa os campos row e column indexados a partir de 0 e garante que são sempre válidos (ou seja, de 0 a 7).

A função create recebe um Str como parâmetro de entrada, representando uma casa válida do tabuleiro através da notação oficial, como "C5". A função create tem de analisar esse Str, verificar que representa uma casa válida e, se for o caso, devolver um valor Square com os campos row e column adequados. A fila 1 corresponde à linha 0, e a fila 8 corresponde à linha 7. Por exemplo, create("C5") tem de devolver uma casa com linha 4 e coluna 2.

O tipo Square também expõe métodos práticos rank e file. No exemplo acima, rank tem de devolver o número inteiro 5 e file tem de devolver o caráter 'C'.

Por fim, a função queen_can_attack recebe dois valores Square diferentes e verifica se duas rainhas colocadas nessas casas se podem atacar uma à outra.

Conclusão: os tipos opacos, como Square, são ótimos quando queres oferecer algumas garantias, como o facto de row e column estarem sempre entre 0 e 7. Os tipos opacos também escondem detalhes de implementação dos utilizadores, o que torna a API mais limpa.

Editar via GitHub A ligação abre numa nova janela ou separador
Roc Exercism

Estás pronto para começar Ataque da rainha?

Inscreve-te no Exercism para aprenderes e dominares Roc com 120 exercícios, e mentoria humana real, tudo grátis.