Dadas las posiciones de dos damas en un tablero de ajedrez, indica si están colocadas de modo que puedan atacarse entre sí o no.
En el juego del ajedrez, una dama puede atacar piezas que estén en la misma fila, columna o diagonal.
Un tablero de ajedrez se puede representar con un array de 8 por 8.
Así que si te dicen que la dama blanca está en c5 (con índices desde cero: columna 2, fila 3) y la dama negra en f2 (con índices desde cero: columna 5, fila 6), entonces sabes que la disposición es así:
También puedes responder si las damas pueden atacarse entre sí. En este caso, la respuesta sería que sí, que pueden, porque ambas piezas comparten una diagonal.
La imagen del tablero de ajedrez fue creada por habere-et-dispertire con LaTeX y el paquete chessboard de Ulrike Fischer.
A veces es necesario lanzar una excepción. Cuando lo hagas, siempre debes incluir un mensaje de error significativo que indique cuál es el origen del error. Esto hace que tu código sea más legible y ayuda mucho con la depuración. En las situaciones en las que sabes que el origen del error será de un tipo determinado, puedes optar por lanzar uno de los tipos de error integrados, pero aun así debes incluir un mensaje significativo.
Este ejercicio en particular requiere que uses la sentencia raise para «lanzar» ValueErrors si al constructor Queen se le pasan números negativos, o números que no son una fila o una columna válidas. Las pruebas solo pasarán si usas raise con la exception y además incluyes un mensaje con ella. También debes hacer raise de un ValueError si las dos reinas que se pasan al método can_attack() están en la misma ubicación.
Para lanzar un ValueError con un mensaje, escribe el mensaje como argumento del 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")
Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.