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 ( C
o 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!