introduzione
Il gioco dello xiangqi , noto anche come scacchi cinesi, è un gioco simile agli scacchi popolare in Cina, Vietnam, Taiwan e altri paesi dell'Asia orientale. I colori dei due lati in xiangqi sono rosso e nero. Xiangqi contiene sette pezzi: general ( G), advisor ( A), elephant ( E), horse ( H), chariot ( R), cannon ( C) e soldier ( S). Ai fini di questa sfida, i pezzi maiuscoli sono considerati rossi e quelli minuscoli neri. La maggior parte di questi pezzi ha un equivalente approssimativo negli scacchi occidentali, ma esiste un pezzo assolutamente unico: il cannone.
Il cannone si muove come una torre negli scacchi o un carro in xiangqi (muovendo un numero qualsiasi di spazi sugli assi X o Y), ma non può attaccare in questo modo. Invece, attacca saltando lungo gli assi X o Y (nello stesso modo in cui si muove) su un pezzo di qualsiasi colore (amico o nemico) e atterrando sul pezzo di colore opposto, che poi cattura. Si noti che come tutti gli scacchi e i pezzi xiangqi, i cannoni non possono catturare pezzi del proprio colore.
Ad esempio, nel diagramma seguente, gli spazi in cui il cannone ( C) può spostarsi sono contrassegnati *e quelli in cui può saltare e catturare sono contrassegnati X, supponendo che vi sia un pezzo nero / minuscolo lì.
....X....
.........
.........
....h....
....*....
****C**aX
....E....
....X....
....g....
....R....
Sfida
Scrivi un programma o una funzione che, dati una scheda xiangqi e le coordinate di un cannone su quella scheda come input, generano un elenco di coordinate su cui il cannone può muoversi o saltare.
Il formato per tutti gli I / O è flessibile.
Formati accettabili per la scheda xiangqi includono una stringa separata da nuova riga, un elenco di stringhe o una stringa con qualsiasi altro separatore non presente aceghrsACEGHRS.. Puoi presumere che la tavola sarà sempre 9x10, la dimensione di una tavola xiangqi.
Il contenuto della scacchiera stessa consisterà in un numero di punti ( .), che rappresentano punti vuoti sulla scacchiera, e personaggi che rappresentano pezzi. La mappatura da pezzo a personaggio è la seguente:
A -> advisor
C -> cannon
E -> elephant
G -> general
H -> horse
R -> chariot
S -> soldier
Le lettere maiuscole rappresentano i pezzi rossi e le lettere minuscole rappresentano i pezzi neri. I personaggi non elencati qui (cioè non in aceghrsACEGHRS.) non appariranno nel tabellone.
Il formato della coordinata di input è flessibile e non è necessario che corrisponda al formato delle coordinate di output. Può essere un elenco di due elementi interi, una 2 tupla, due numeri con qualsiasi separatore o due caratteri, ad esempio. Può anche essere indicizzato 0 o indicizzato 1. Puoi presumere che le coordinate sulla scacchiera si risolveranno sempre in un cannone ( Co c).
Le coordinate su cui il cannone può saltare e spostarsi devono apparire nella stessa lista in output; la distinzione tra i due non è necessaria. I formati accettabili per le singole coordinate di output sono gli stessi di quelli del coord di input. Le coordinate possono essere separate da newline, emesse come un elenco o qualsiasi altra rappresentazione. Non è necessario alcun ordine particolare; l'ordine non deve nemmeno essere deterministico.
Nota che i salti su un pezzo dello stesso colore (caso) del cannone non sono legali e quindi non possono apparire nell'output.
Casi test
Si noti che non tutti i casi di test sono possibili posizioni 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)]
punteggio
Questo è code-golf , quindi vince la risposta più breve (in byte). Buon golf!