Les échecs hexagonaux décrivent une famille de variantes d'échecs jouées sur un plateau où les cellules sont des hexagones au lieu des carrés traditionnels. Il existe de nombreuses variantes de ce type; dans ce défi, nous nous concentrerons sur la variante de Gliński, qui est la plus courante.
Le plateau est composé de trois couleurs (pour que la même couleur ne partage pas de bord), les bords des hexagones faisant face aux joueurs. La carte a 11 fichiers, marqués par des lettres à a
travers l
(la lettre j
n'est pas utilisée), et 11 rangs (qui se plient à 60 ° au fichier f
). Les rangs 1
dans 6
chacun contiennent 11 cellules, le rang 7
a 9 cellules, le rang 8
a 7, etc. Le rang 11
contient exactement une cellule: f11 . (Si cela peut aider, pensez à chaque rang comme faisant une forme de "V" très large.)
Voici un exemple d'image du tableau, avec le chevalier sur la cellule centrale. Les cellules marquées d'un point sont les mouvements légaux de ce chevalier particulier. Le chevalier se déplace d'une manière similaire aux échecs "normaux", deux-en-un et un-dessus. En termes d'échecs hexagonaux, c'est un mouvement orthogonal (à travers un bord), puis un mouvement diagonal dans la même direction (le mouvement le plus proche de la même couleur). Par exemple avec le chevalier ci-dessous, un mouvement orthogonal "vers le haut" au brun clair est alors accompagné d'un mouvement diagonal "vers le haut et vers la droite" ou "vers le haut et vers la gauche" vers le brun clair le plus proche.
Depuis le domaine public via https://commons.wikimedia.org/wiki/File:Glinski_Chess_Knight.svg
Ce chevalier est positionné à f6 et les mouvements légaux sont donc
c4, c5, d3, d7, e3, e8, g3, g8, h3, h7, i4, i5
Contribution
Une seule entrée donnant la cellule de départ de notre chevalier. Cela peut être une chaîne unique "b6"
, deux chaînes "b", "6"
, etc., dans n'importe quel format pratique . Les lettres d'entrée peuvent être en majuscules ou en minuscules - votre choix.
Production
Une liste des mouvements valides qu'un chevalier à cet endroit peut effectuer. Cela peut être un tableau de chaînes, une chaîne unique avec un délimiteur sans ambiguïté et cohérent, des chaînes séparées par des sauts de ligne, etc., selon ce qui est le plus pratique. La sortie n'a pas nécessairement besoin d'être triée et peut être en majuscule ou en minuscule - votre choix.
Règles
- Supposons qu'aucune autre pièce ne se trouve sur le plateau ou n'interfère avec les mouvements. Nous nous concentrons uniquement sur le chevalier.
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Si possible, veuillez inclure un lien vers un environnement de test en ligne afin que d'autres personnes puissent essayer votre code!
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Exemples
b6
a3, c4, d5, d9, e7, e8
f6
c4, c5, d3, d7, e3, e8, g3, g8, h3, h7, i4, i5
f11
d8, e8, g8, h8
i1
f2, f3, g4, h4, l2, k3
la source
Réponses:
JavaScript (ES6), 184 octets
Prend le fichier
F
comme un caractère et le rangR
comme un entier dans la syntaxe de curry(F)(R)
. Renvoie un tableau de chaînes.Comment?
Étape # 1: convertir le fichier / rang en coordonnées cartésiennes
Nous convertissons les coordonnées d'échecs hexagonales en coordonnées cartésiennes (x, y) avec x dans [0 .. 10] et y dans [0 .. 20] :
Étape # 2: appliquez les vecteurs de déplacement
Ci-dessous la liste des vecteurs de déplacement dans le système cartésien:
Nous appliquons chacun d'eux aux coordonnées source (x, y) et obtenons une liste de coordonnées cibles (X, Y) .
Étape # 3: tester les coordonnées cibles
Nous devons maintenant vérifier quelles coordonnées cibles sont réellement situées à l'intérieur du plateau. Cela se fait en testant X + Y et X - Y :
Les coordonnées sont valides si toutes les comparaisons suivantes sont vraies:
Nous devons également vérifier que X est dans [0 .. 10] . Cela n'est pas fait explicitement car
s[X]
n'est pas défini si ce n'est pas le cas, ce qui entraîne finalement une valeur falsifiée qui est filtrée.Étape # 4: reconvertissez en coordonnées d'échecs hexagonales
Enfin, les coordonnées cibles valides sont reconverties en coordonnées d'échecs hexagonales, en utilisant l'inverse des formules décrites à l'étape # 1.
Cas de test
Afficher l'extrait de code
la source
Lot. 403 octets
Ajuste le système de coordonnées, bien que d'une manière différente de la réponse de @ Arnauld. Le
c
sous-programme profite de la symétrie en essayant la réflexion miroir de chaque mouvement. (J'ai également essayé de faire tourner mais cela prenait trop d'octets.)la source
JavaScript (ES6), 184 octets
J'ai pensé porter ma solution Batch sur ES6 pour voir comment elle se comparait ... Je ne m'attendais pas à ce qu'elle soit aussi proche ...
la source
CJam, 77
Essayez-le en ligne
Aperçu:
J'utilise un système de coordonnées qui ressemble à a..f et 1..6 sur le côté gauche, étendu sans flexion, avec des lettres remplacées par des chiffres et changé pour être basé sur 0 (b3 → [1 2], g1 → [6 1], k3 → [9 6]). Les mouvements relatifs dans ce système sont [1 3], [2 -1], [2 3] et leurs réflexions (négatives et inversées, par exemple [1 3] → [-1 -3], [3 1], [- 3 -1]). Une position [xy] résultante est valide si [xyz] ⊂ [0 1 .. 10] où z = x-y + 5.
la source
Dyalog APL, 72 octets
essayer
construit une liste
a
de toutes les cellules valides:'A1' 'A2' ... 'L6'
a
est utilisé pour l'entrée et la sortieconstruit une liste
j
des coordonnées correspondantes àa
dans un système où l'axe x est le longA6-L1
et y le longF1-F11
une troisième coordonnée imaginaire est la différence des deux premiers
si la cellule d'entrée est traduite en coordonnées
0 0 0
, un chevalier peut se déplacer vers les cellules dont le produit des coordonnées est 6 ou -6la source
Python 3.6, 149
Une fonction anonyme appelée avec deux chaînes pour le fichier et le rang; renvoie une liste de chaînes.
Non golfé:
la source