Tracks
/
Roc
Roc
/
Ejercicios
/
Ataque de la reina
Ataque de la reina

Ataque de la reina

Fácil

Instrucciones

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í:

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

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.

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 se llaman «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 del tablero de ajedrez. Internamente usa los campos row y column indexados desde 0, y garantiza que siempre sean válidos (es decir, de 0 a 7).

La función create recibe como argumento un Str que representa una casilla válida del tablero con la notación oficial, como "C5". La función create debe analizar ese Str, verificar que representa una casilla válida y, de ser así, devolver un valor Square que contenga los campos row y column correspondientes. Al rank 1 le corresponde la fila 0, y al rank 8, la fila 7. Por ejemplo, create("C5") debe devolver una casilla con fila 4 y columna 2.

El tipo Square también expone unos prácticos métodos rank y file. En el ejemplo anterior, rank debe devolver el 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 reinas colocadas en esas casillas pueden atacarse entre sí.

Idea clave: los tipos opacos como Square son excelentes cuando quieres ofrecer ciertas garantías, como que row y column siempre estén 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 una pestaña nuevas
Roc Exercism

¿Todo listo para empezar Ataque de la reina?

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