Introducción
El juego de xiangqi , también conocido como ajedrez chino, es un juego similar al ajedrez popular en China, Vietnam, Taiwán y otros países del este asiático. Los colores de los dos lados en xiangqi son rojo y negro. Hay siete piezas en xiangqi: general ( G
), asesor ( A
), elefante ( E
), caballo ( H
), carro ( R
), cañón ( C
) y soldado ( S
). Para los propósitos de este desafío, las piezas en mayúscula se consideran rojas y las minúsculas en negro. La mayoría de estas piezas tienen un equivalente aproximado en el ajedrez occidental, pero hay una pieza completamente única: el cañón.
El cañón se mueve como una torre en el ajedrez o un carro en xiangqi (moviendo cualquier número de espacios en los ejes X o Y), pero no puede atacar de esta manera. En cambio, ataca saltando a lo largo de los ejes X o Y (de la misma manera que se mueve) sobre una pieza de cualquier color (amigo o enemigo) y aterrizando en la pieza del color opuesto, que luego captura. Tenga en cuenta que, como todas las piezas de ajedrez y xiangqi, los cañones no pueden capturar piezas de su propio color.
Por ejemplo, en el siguiente diagrama, los espacios a los que C
puede moverse el cañón ( ) están marcados *
y aquellos a los que puede saltar y capturar están marcados X
, suponiendo que haya una pieza negra / minúscula allí.
....X....
.........
.........
....h....
....*....
****C**aX
....E....
....X....
....g....
....R....
Desafío
Escriba un programa o función que, dada una placa xiangqi y las coordenadas de un cañón en esa placa como entrada, emite una lista de coordenadas a las que el cañón puede moverse o saltar.
El formato para todas las E / S es flexible.
Los formatos aceptables para el tablero xiangqi incluyen una cadena separada por una nueva línea, una lista de cadenas o una cadena con cualquier otro separador no incluido aceghrsACEGHRS.
. Puede suponer que el tablero siempre será 9x10, el tamaño de un tablero xiangqi.
El contenido del tablero en sí consistirá en varios puntos ( .
), que representan puntos vacíos en el tablero y personajes que representan piezas. La asignación de pieza a personaje es la siguiente:
A -> advisor
C -> cannon
E -> elephant
G -> general
H -> horse
R -> chariot
S -> soldier
Las letras mayúsculas representan piezas rojas, y las letras minúsculas representan piezas negras. Los caracteres que no figuran aquí (es decir, que no están en aceghrsACEGHRS.
) no aparecerán en el tablero.
El formato de la coordenada de entrada es flexible y no es necesario que coincida con el formato de las coordenadas de salida. Puede ser una lista de dos elementos enteros, una tupla de 2, dos números con cualquier separador o dos caracteres, por ejemplo. También puede ser 0 indexado o 1 indexado. Puede suponer que la coordenada en el tablero siempre se resolverá en un cañón ( C
o c
).
Las coordenadas a las que el cañón puede saltar y moverse deben aparecer en la misma lista en la salida; La distinción entre los dos no es necesaria. Los formatos aceptables para cualquier coordenada de salida individual son los mismos que para las coordenadas de entrada. Las coordenadas pueden estar separadas por una nueva línea, enviadas como una lista o cualquier otra representación. No es necesario ningún orden en particular; el orden ni siquiera tiene que ser determinista.
Tenga en cuenta que los saltos sobre una pieza del mismo color (caja) del cañón no son legales y, por lo tanto, no pueden aparecer en la salida.
Casos de prueba
Tenga en cuenta que no todos los casos de prueba son posibles posiciones xiangqi.
Input board
Input coordinate (0-indexed)
List of output coordinates
.........
.........
.........
.........
.........
....C....
.........
.........
.........
.........
(4, 5)
[(0, 5), (1, 5), (2, 5), (3, 5), (5, 5), (6, 5), (7, 5), (8, 5), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (4, 6), (4, 7), (4, 8), (4, 9)]
.........
.....G...
.........
.........
.....e...
.........
.........
h..R.c..S
.....a...
.........
(5, 7)
[(4, 7), (6, 7), (7, 7), (5, 6), (5, 5), (5, 1)]
..s......
..A...e..
.........
EACCcsh.H
..r......
.....S...
......s..
....C....
..g......
(2, 3)
[(2, 0), (2, 2), (4, 3), (2, 9)]
rheagaehr
.........
.c.....c.
s.s.s.s.s
.........
.........
S.S.S.S.S
.C.....C.
.........
RHEAGAEHR
(7, 7)
[(2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (8, 7), (7, 0), (7, 3), (7, 4), (7, 5), (7, 6), (7, 8)]
Puntuación
Este es el código de golf , por lo que gana la respuesta más corta (en bytes). ¡Feliz golf!