Rutas
/
Roc
Roc
/
Ejercicios
/
Ataque de reina
Ataque de reina

Ataque de reina

Fácil

Instrucciones

Dada la posición de dos damas en un tablero de ajedrez, indica si están colocadas de forma que puedan atacarse entre sí.

En el ajedrez, una dama puede atacar las 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í, si te dicen que la dama blanca está en c5 (indexado desde cero en la columna 2 y la fila 3) y la dama negra en f2 (indexado desde cero en la columna 5 y la fila 6), entonces ya sabes que la disposición es la siguiente:

Un tablero de ajedrez con dos damas. Las flechas que salen de la dama situada en c5 indican las posibles direcciones de captura por columna, fila y diagonal.

También puedes responder si las damas pueden atacarse entre sí. En este caso, la respuesta sería sí, pueden, porque ambas piezas comparten una diagonal.

Créditos

La imagen del tablero de ajedrez fue creada por habere-et-dispertire con LaTeX y el paquete chessboard de Ulrike Fischer.

Implementación

En ajedrez, las filas se llaman «ranks» y las columnas, «files». Los ranks van del 1 al 8, mientras que los files van de la A a la H.

En este ejercicio, Square es un tipo opaco que representa una casilla de un tablero de ajedrez. Internamente usa campos row y column indexados desde 0 y garantiza que siempre son válidos (es decir, que van de 0 a 7).

La función create recibe un Str como entrada, que representa una casilla válida del tablero con la notación oficial, como "C5". La función create debe analizar ese Str, comprobar que representa una casilla válida y, si es así, devolver un valor Square que contenga los campos row y column correspondientes. El rank 1 se corresponde con la fila 0, y el rank 8, con la fila 7. Por ejemplo, create("C5") debe devolver una casilla con fila 4 y columna 2.

El tipo Square también expone unos métodos muy útiles, rank y file. En el ejemplo anterior, rank debe devolver el número entero 5 y file debe devolver el carácter 'C'.

Por último, la función queen_can_attack recibe dos valores Square distintos y comprueba si las damas colocadas en esas casillas pueden atacarse entre sí.

Conclusión: los tipos opacos como Square son estupendos cuando quieres ofrecer ciertas garantías, como el hecho de que row y column estén siempre entre 0 y 7. Los tipos opacos también ocultan los detalles de implementación a los usuarios, lo que hace que la API sea más limpia.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Roc Exercism

¿Listo para empezar Ataque de reina?

Regístrate en Exercism para aprender y dominar Roc con 120 ejercicios y mentoría humana real, todo gratis.