Introdução
O jogo de xiangqi , também conhecido como xadrez chinês, é um jogo semelhante ao xadrez popular na China, Vietnã, Taiwan e outros países do leste asiático. As cores dos dois lados em xiangqi são vermelho e preto. Existem sete peças em xiangqi: geral ( G
), conselheiro ( A
), elefante ( E
), cavalo ( H
), carruagem ( R
), canhão ( C
) e soldado ( S
). Para os propósitos deste desafio, as peças maiúsculas são consideradas vermelhas e as minúsculas pretas. A maioria dessas peças tem um equivalente aproximado no xadrez ocidental, mas há uma peça completamente única: o canhão.
O canhão se move como uma torre no xadrez ou uma carruagem no xiangqi (movendo qualquer número de espaços nos eixos X ou Y), mas não pode atacar dessa maneira. Em vez disso, ele ataca pulando ao longo dos eixos X ou Y (da mesma maneira que se move) sobre uma peça de qualquer cor (amigo ou inimigo) e aterrissando na peça de cor oposta, que ela captura. Observe que, como todas as peças de xadrez e xiangqi, os canhões não podem capturar peças de sua própria cor.
Por exemplo, no diagrama a seguir, os espaços para os quais o canhão ( C
) pode se mover são marcados *
e aqueles para os quais ele pode pular e capturar são marcados X
, assumindo que haja uma peça preta / minúscula lá.
....X....
.........
.........
....h....
....*....
****C**aX
....E....
....X....
....g....
....R....
Desafio
Escreva um programa ou função que, dada uma placa xiangqi e as coordenadas de um canhão nessa placa como entrada, produza uma lista de coordenadas para as quais o canhão pode se mover ou pular.
O formato para todas as E / S é flexível.
Os formatos aceitáveis para a placa xiangqi incluem uma cadeia separada por nova linha, uma lista de cadeias ou uma cadeia com qualquer outro separador que não esteja aceghrsACEGHRS.
. Você pode supor que o quadro sempre será 9x10, do tamanho de um quadro xiangqi.
O conteúdo do próprio quadro consistirá em um número de pontos ( .
), representando pontos vazios no quadro e caracteres representando peças. O mapeamento de peça para caractere é o seguinte:
A -> advisor
C -> cannon
E -> elephant
G -> general
H -> horse
R -> chariot
S -> soldier
Letras maiúsculas representam peças vermelhas e letras minúsculas representam peças pretas. Os caracteres não listados aqui (ou seja, não incluídos aceghrsACEGHRS.
) não aparecerão no quadro.
O formato da coordenada de entrada é flexível e não é necessário para corresponder ao formato das coordenadas de saída. Pode ser uma lista de dois elementos inteiros, uma tupla de 2, dois números com qualquer separador ou dois caracteres, por exemplo. Também pode ser indexado em 0 ou 1. Você pode supor que a coordenada no quadro sempre será resolvida como um canhão ( C
ou c
).
As coordenadas para as quais o canhão pode pular e mover devem aparecer na mesma lista na saída; a distinção entre os dois não é necessária. Os formatos aceitáveis para quaisquer coordenadas de saída individuais são os mesmos da coordenada de entrada. As coordenadas podem ser separadas por nova linha, exibidas como uma lista ou qualquer outra representação. Nenhuma ordem específica é necessária; a ordem nem precisa ser determinística.
Observe que saltar em um pedaço da mesma cor (estojo) do canhão não é legal e, portanto, não pode aparecer na saída.
Casos de teste
Observe que nem todos os casos de teste são possíveis posições 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)]
Pontuação
Isso é código-golfe , então a resposta mais curta (em bytes) vence. Feliz golfe!