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.
Às vezes, é necessário lançar uma exceção. Quando você faz isso, deve sempre incluir uma mensagem de erro significativa para indicar qual é a origem do erro. Isso deixa seu código mais legível e ajuda bastante na depuração. Em situações em que você sabe que a origem do erro será de um determinado tipo, pode escolher lançar um dos tipos de erro embutidos, mas ainda deve incluir uma mensagem significativa.
Este exercício em particular exige que você use a instrução raise para "lançar" ValueErrors se o construtor de Queen receber números negativos ou números que não são uma linha ou coluna válida. Os testes só vão passar se você raise a exception e incluir uma mensagem junto dela. Você também deve raise um ValueError se as duas rainhas passadas para o método can_attack() estiverem na mesma posição.
Para raise um ValueError com uma mensagem, escreva a mensagem como argumento para o tipo exception:
# if the row parameter is negative
raise ValueError("row not positive")
# if the row parameter is not on the defined board
raise ValueError("row not on board")
# if the column parameter is negative
raise ValueError("column not positive")
# if the column parameter is not on the defined board
raise ValueError("column not on board")
# if both the queens are on the same location
raise ValueError("Invalid queen position: both queens in the same square")
Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.