introduction
Le jeu de xiangqi , également connu sous le nom d'échecs chinois, est un jeu d'échecs populaire en Chine, au Vietnam, à Taiwan et dans d'autres pays d'Asie de l'Est. Les couleurs des deux côtés en xiangqi sont rouge et noir. Il y a sept pièces dans xiangqi: le général ( G
), le conseiller ( A
), l'éléphant ( E
), le cheval ( H
), le char ( R
), le canon ( C
) et le soldat ( S
). Pour les besoins de ce défi, les pièces en majuscules sont considérées comme des pièces rouges et noires en minuscules. La plupart de ces pièces ont un équivalent approximatif dans les échecs occidentaux, mais il y a une pièce tout à fait unique: le canon.
Le canon se déplace comme une tour d'échecs ou un char en xiangqi (déplaçant n'importe quel nombre d'espaces sur les axes X ou Y), mais ne peut pas attaquer de cette façon. Au lieu de cela, il attaque en sautant le long des axes X ou Y (de la même manière qu'il se déplace) sur une pièce de n'importe quelle couleur (ami ou ennemi) et atterrissant sur la pièce de couleur opposée, qu'il capture ensuite. Notez que comme toutes les pièces d'échecs et de xiangqi, les canons ne peuvent pas capturer des pièces de leur propre couleur.
Par exemple, dans le diagramme suivant, les espaces vers lesquels le canon ( C
) peut se déplacer sont marqués avec *
, et ceux vers lesquels il peut sauter et capturer sont marqués avec X
, en supposant qu'il y a une pièce noire / minuscule.
....X....
.........
.........
....h....
....*....
****C**aX
....E....
....X....
....g....
....R....
Défi
Écrivez un programme ou une fonction qui, étant donné un tableau xiangqi et les coordonnées d'un canon sur ce tableau en entrée, génère une liste de coordonnées auxquelles le canon peut se déplacer ou sauter.
Le format de toutes les E / S est flexible.
Les formats acceptables pour la carte xiangqi incluent une chaîne séparée par une nouvelle ligne, une liste de chaînes ou une chaîne avec tout autre séparateur absent aceghrsACEGHRS.
. Vous pouvez supposer que le tableau sera toujours de 9 x 10, la taille d'un tableau xiangqi.
Le contenu du tableau lui-même comprendra un certain nombre de points ( .
), représentant des points vides sur le tableau, et des personnages représentant des pièces. Le mappage morceau à personnage est le suivant:
A -> advisor
C -> cannon
E -> elephant
G -> general
H -> horse
R -> chariot
S -> soldier
Les lettres majuscules représentent les pièces rouges et les lettres minuscules les pièces noires. Les personnages non répertoriés ici (c'est-à-dire non inclus aceghrsACEGHRS.
) n'apparaîtront pas dans le tableau.
Le format des coordonnées d'entrée est flexible et n'est pas requis pour correspondre au format des coordonnées de sortie. Il peut s'agir d'une liste de deux éléments entiers, un 2-tuple, deux nombres avec n'importe quel séparateur, ou deux caractères, par exemple. Il peut également être indexé 0 ou indexé 1. Vous pouvez supposer que les coordonnées sur le plateau se résoudront toujours en canon ( C
ou c
).
Les coordonnées auxquelles le canon peut sauter et se déplacer doivent apparaître dans la même liste en sortie; la distinction entre les deux n'est pas nécessaire. Les formats acceptables pour toutes les coordonnées de sortie individuelles sont les mêmes que ceux pour les coordonnées d'entrée. Les coordonnées peuvent être séparées par des sauts de ligne, sorties sous forme de liste ou toute autre représentation. Aucun ordre particulier n'est nécessaire; l'ordre n'a même pas à être déterministe.
Notez que les sauts sur un morceau de la même couleur (boîtier) du canon ne sont pas légaux et ne peuvent donc pas apparaître dans la sortie.
Cas de test
Notez que tous les cas de test ne sont pas des positions xiangqi possibles.
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)]
Notation
Il s'agit de code-golf , donc la réponse la plus courte (en octets) l'emporte. Bon golf!