Wprowadzenie
Gra w Xiangqi , znana również jako szachy chińskie, jest grą podobną do szachów popularną w Chinach, Wietnamie, na Tajwanie i innych krajach Azji Wschodniej. Kolory obu stron w Xiangqi są czerwone i czarne. W Xiangqi jest siedem elementów: generał ( G
), doradca ( A
), słoń ( E
), koń ( H
), rydwan ( R
), armata ( C
) i żołnierz ( S
). Do celów tego wyzwania wielkie litery są uważane za czerwone, a małe za czarne. Większość tych elementów ma przybliżony odpowiednik w szachach zachodnich, ale jest jeden całkowicie unikalny element: działo.
W armat porusza się jak wieża w szachy lub rydwan w Xiangqi (Moving dowolną liczbę miejsc na obu osiach X lub Y), ale nie mogą atakować w ten sposób. Zamiast tego atakuje, przeskakując wzdłuż osi X lub Y (w ten sam sposób, w jaki się porusza) nad jednym kawałkiem dowolnego koloru (przyjaciel lub wróg) i lądując na kawałku o przeciwnych kolorach, który następnie przechwytuje. Pamiętaj, że podobnie jak wszystkie szachy i figury xiangqi, armaty nie mogą uchwycić pionków własnego koloru.
Na przykład, na poniższym schemacie, pola, do których armata ( C
) może się poruszać, są oznaczone *
, a te, do których może skakać i przechwytywać, są oznaczone X
, zakładając, że jest tam czarny / mały kawałek.
....X....
.........
.........
....h....
....*....
****C**aX
....E....
....X....
....g....
....R....
Wyzwanie
Napisz program lub funkcję, która biorąc pod uwagę tablicę xiangqi i współrzędne armaty na tej tablicy jako dane wejściowe, wyświetla listę współrzędnych, do których armata może się poruszać lub skakać.
Format wszystkich I / O jest elastyczny.
Dopuszczalne formaty dla tablicy xiangqi obejmują ciąg oddzielony znakiem nowej linii, listę ciągów lub ciąg znaków z dowolnym innym separatorem, którego nie ma aceghrsACEGHRS.
. Możesz założyć, że plansza będzie zawsze miała rozmiar 9x10, czyli rozmiar planszy xiangqi.
Zawartość samej planszy będzie się składać z wielu kropek ( .
), reprezentujących puste punkty na planszy i postaci reprezentujących pionki. Mapowanie poszczególnych elementów jest następujące:
A -> advisor
C -> cannon
E -> elephant
G -> general
H -> horse
R -> chariot
S -> soldier
Wielkie litery reprezentują czerwone elementy, a małe litery oznaczają czarne elementy. Postacie niewymienione tutaj (tj. Nie w aceghrsACEGHRS.
) nie pojawią się na planszy.
Format współrzędnych wejściowych jest elastyczny i nie jest wymagany do dopasowania formatu współrzędnych wyjściowych. Może to być lista dwóch elementów całkowitych, na przykład 2-krotek, dwóch liczb z dowolnym separatorem lub dwóch znaków. Może być również indeksowany 0 lub indeksowany 1. Możesz założyć, że współrzędne na planszy zawsze będą rozpatrywane jako działo ( C
lub c
).
Współrzędne, do których armata może skakać i przemieszczać się, muszą pojawić się na tej samej liście na wyjściu; rozróżnienie między nimi nie jest konieczne. Akceptowane formaty dla poszczególnych współrzędnych wyjściowych są takie same jak formaty dla współrzędnej wejściowej. Współrzędne mogą być oddzielone znakiem nowej linii, generowane jako lista lub dowolna inna reprezentacja. Żadne szczególne zamówienie nie jest konieczne; kolejność nie musi nawet być deterministyczna.
Zauważ, że skoki na kawałek tego samego koloru (obudowy) armaty są niezgodne z prawem i dlatego nie mogą pojawić się na wyjściu.
Przypadki testowe
Zauważ, że nie wszystkie przypadki testowe są możliwymi pozycjami 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)]
Punktacja
To jest golf-golf, więc wygrywa najkrótsza odpowiedź (w bajtach). Miłej gry w golfa!