Введение
Игра в сянци , также известная как китайские шахматы, является шахматной игрой, популярной в Китае, Вьетнаме, Тайване и других странах Восточной Азии. Цвета двух сторон в сянци - красный и черный. В сянци есть семь частей: общее ( G
), советник ( A
), слон ( E
), лошадь ( H
), колесница ( R
), пушка ( C
) и солдат ( S
). Для целей этого задания заглавные части считаются красными, а строчные - черными. Большинство из этих фигур имеют грубый эквивалент в западных шахматах, но есть одна совершенно уникальная фигура: пушка.
Эти пушки двигаются как ладья в шахматах или колесница в сяом (перемещении любого количества пробелов по обе оси Х или оси Y), но не может атаковать этот путь. Вместо этого он атакует, перепрыгивая вдоль осей X или Y (так же, как он движется) через одну фигуру любого цвета (друга или врага) и приземляясь на фигуру противоположного цвета, которую затем захватывает. Обратите внимание, что, как и все фигуры шахмат и сянци, пушки не могут захватывать фигуры своего цвета.
Например, на следующей диаграмме пространства, в которые cannon ( C
) может перемещаться, отмечены *
, а те, в которые он может прыгать и захватывать, отмечены X
, предполагая, что там есть черный / строчный фрагмент.
....X....
.........
.........
....h....
....*....
****C**aX
....E....
....X....
....g....
....R....
Вызов
Напишите программу или функцию, которая с учетом доски сянци и координат пушки на этой доске в качестве входных данных выводит список координат, по которым пушка может двигаться или прыгать.
Формат для всех операций ввода / вывода является гибким.
Приемлемые форматы для доски xiangqi включают строку, разделенную новой строкой, список строк или строку с любым другим разделителем, которого нет в aceghrsACEGHRS.
. Вы можете предположить, что доска всегда будет размером 9x10, размером с сянци.
Содержимое самой доски будет состоять из нескольких .
точек ( ), представляющих пустые точки на доске, и символов, представляющих фигуры. Отображение по частям выглядит следующим образом:
A -> advisor
C -> cannon
E -> elephant
G -> general
H -> horse
R -> chariot
S -> soldier
Прописные буквы обозначают красные части, а строчные буквы - черные. Символы, не перечисленные здесь (то есть не в aceghrsACEGHRS.
), не будут отображаться на доске.
Формат входной координаты гибкий, и не требуется совпадать с форматом выходных координат. Это может быть, например, список из двух целочисленных элементов, 2-кортежа, двух чисел с любым разделителем или двух символов. Также может быть 0-индексирован или 1-индексирован. Вы можете предположить, что координата на доске всегда будет соответствовать пушке ( C
или c
).
Координаты, по которым пушка может прыгать и двигаться, должны отображаться в том же списке при выводе; Различие между двумя не является необходимым. Приемлемые форматы для любых отдельных выходных координат такие же, как для входных координат. Координаты могут быть разделены новой строкой, выводиться в виде списка или любого другого представления. Никакого конкретного заказа не требуется; порядок даже не должен быть детерминированным.
Обратите внимание, что прыжки на части одного и того же цвета (корпуса) орудия недопустимы и, следовательно, не могут появиться в выходных данных.
Контрольные примеры
Обратите внимание, что не во всех тестовых случаях возможны позиции сянци.
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)]
счет
Это Код-гольфпоэтому самый короткий ответ (в байтах) выигрывает. Удачного игры в гольф!