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:
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.
A imagem do tabuleiro de xadrez foi feita por habere-et-dispertire com LaTeX e o pacote chessboard de Ulrike Fischer.
Por vezes é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa que indique qual é a origem do erro. Isto torna o teu código mais legível e ajuda imenso na depuração. Nas situações em que sabes que a origem do erro vai ser de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves ainda assim incluir uma mensagem significativa.
Este exercício em particular exige que uses a instrução raise para "lançar" ValueErrors se passares ao construtor Queen números negativos ou números que não correspondam a uma linha ou coluna válida. Os testes só passam se fizeres raise da exception e incluíres uma mensagem com ela. Também deves fazer raise de um ValueError se as duas rainhas passadas ao método can_attack() estiverem na mesma posição.
Para lançar um ValueError com uma mensagem, escreve a mensagem como argumento do 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")
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.