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:
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.
A imagem do tabuleiro de xadrez foi feita por habere-et-dispertire usando LaTeX e o pacote chessboard de Ulrike Fischer.
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.
Crie sua conta no Exercism para aprender e dominar Roc com 120 exercícios e mentoria humana de verdade, tudo de graça.