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

Ataque da rainha

Fácil

Instruções

Dadas as posições de duas rainhas em um tabuleiro de xadrez, indique se elas estão posicionadas de modo que possam atacar 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 de 8 por 8.

Então, se disserem que a rainha branca está em c5 (com índice começando em zero: coluna 2, linha 3) e a rainha preta em f2 (com índice começando em zero: coluna 5, linha 6), você sabe que a configuração é assim:

Um tabuleiro de xadrez com duas rainhas. Setas que saem da rainha em c5 indicam as possíveis direções de captura ao longo de colunas, linhas e diagonais.

Você também consegue responder se as rainhas podem atacar uma à outra. Nesse caso, a resposta seria sim, elas podem, porque as duas peças compartilham uma diagonal.

Créditos

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

Implementação

No xadrez, as linhas são chamadas de "ranks" e as colunas de "files". Os ranks vão de 1 a 8, e os files vão de A a H.

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

A função create recebe uma Str como entrada, representando uma casa válida do tabuleiro na notação oficial, como "C5". A função create deve analisar essa Str, verificar se ela representa uma casa válida e, se representar, retornar um valor Square com os campos row e column adequados. O rank 1 corresponde à linha 0, e o rank 8 corresponde à linha 7. Por exemplo, create("C5") deve retornar uma casa com linha 4 e coluna 2.

O tipo Square também expõe dois métodos úteis, rank e file. No exemplo acima, rank deve retornar o número inteiro 5, e file deve retornar o caractere 'C'.

Por fim, a função queen_can_attack recebe dois valores Square diferentes e verifica se as rainhas colocadas nessas casas podem se atacar ou não.

Conclusão: tipos opacos como Square são ótimos quando você quer oferecer algumas garantias, como o fato de que row e column estão sempre entre 0 e 7. Tipos opacos também escondem detalhes de implementação dos usuários, o que deixa a API mais limpa.

Editar via GitHub O link abre em uma nova janela ou aba
Roc Exercism

Tudo pronto para começar Ataque da rainha?

Crie sua conta no Exercism para aprender e dominar Roc com 120 exercícios e mentoria humana de verdade, tudo de graça.