介绍
象棋游戏,又称为中国象棋,是一种在中国,越南,台湾和其他东亚国家流行的象棋游戏。象棋两侧的颜色是红色和黑色。象棋有七个部分:将军(G
),顾问(A
),大象(E
),马(H
),战车(R
),大炮(C
)和士兵(S
)。出于此挑战的目的,大写字母被认为是红色,小写字母被认为是黑色。这些棋子中的大多数与西方国际象棋的棋子大致相当,但是有一个完全独特的棋子:大炮。
该炮移动像在国际象棋一个车或在象棋战车(移动的任何数量的在任一X或Y轴的空间),但不能攻击这种方式。相反,它沿着X或Y轴(它移动以同样的方式)在攻击由跳跃一个片的任何颜色(朋友或敌人)和着陆的相反色片,它然后捕获的。请注意,像所有国际象棋和象棋棋子一样,大炮无法捕捉到自己颜色的棋子。
例如,在下图中,假定大炮(C
)可以移动到的空间标记为*
,而大炮()可以跳转和捕获的空间标记为X
,假设其中存在黑色/小写字母。
....X....
.........
.........
....h....
....*....
****C**aX
....E....
....X....
....g....
....R....
挑战
编写一个程序或函数,以象棋板和该板上的一门大炮的坐标为输入,输出一个大炮可以移动或跳转到的坐标列表。
所有I / O的格式都很灵活。
xiangqi板可接受的格式包括用换行符分隔的字符串,字符串列表或带有不在其中的任何其他分隔符的字符串aceghrsACEGHRS.
。您可能会假设该板将始终为9x10,即祥起板的大小。
电路板本身的内容将由多个句点(.
)组成,它们表示电路板上的空白点,而字符则表示块。字符到字符的映射如下:
A -> advisor
C -> cannon
E -> elephant
G -> general
H -> horse
R -> chariot
S -> soldier
大写字母代表红色,小写字母代表黑色。此处未列出的字符(即不在中aceghrsACEGHRS.
)将不会出现在面板中。
输入坐标的格式是灵活的,不需要与输出坐标的格式匹配。例如,它可以是两个整数元素,两个元组,两个带分隔符的数字或两个字符的列表。它也可以是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)]
计分
这是 代码高尔夫球,因此最短的答案(以字节为单位)获胜。打高尔夫球快乐!