Aux échecs, un chevalier ne peut se déplacer qu'aux positions marquées d'un X par rapport à sa position actuelle, marquées d'un ♞:
Un graphique de chevalier est un graphique qui représente tous les mouvements légaux de la pièce d'échecs de chevalier sur un échiquier. Chaque sommet de ce graphique représente un carré de l'échiquier, et chaque bord relie deux carrés éloignés l'un de l'autre d'un chevalier.
Le graphique ressemble à ceci pour une carte standard 8 x 8.
Défi:
Étant donné un entier N , où 3 ≤ N ≤ 8 , affichez une matrice N par N représentant une carte, où le nombre de mouvements possibles depuis chaque position est indiqué. Pour N = 8 , la sortie sera une matrice montrant les valeurs de chaque sommet dans le graphique ci-dessus.
Le format de sortie est flexible. La liste des listes ou même une liste aplatie, etc. sont des formats acceptés.
Ensemble complet de cas de test:
--- N = 3 ---
2 2 2
2 0 2
2 2 2
--- N = 4 ---
2 3 3 2
3 4 4 3
3 4 4 3
2 3 3 2
--- N = 5 ---
2 3 4 3 2
3 4 6 4 3
4 6 8 6 4
3 4 6 4 3
2 3 4 3 2
--- N = 6 ---
2 3 4 4 3 2
3 4 6 6 4 3
4 6 8 8 6 4
4 6 8 8 6 4
3 4 6 6 4 3
2 3 4 4 3 2
--- N = 7 ---
2 3 4 4 4 3 2
3 4 6 6 6 4 3
4 6 8 8 8 6 4
4 6 8 8 8 6 4
4 6 8 8 8 6 4
3 4 6 6 6 4 3
2 3 4 4 4 3 2
--- N = 8 ---
2 3 4 4 4 4 3 2
3 4 6 6 6 6 4 3
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
3 4 6 6 6 6 4 3
2 3 4 4 4 4 3 2
Il s'agit de code-golf, donc la solution la plus courte dans chaque langue l'emporte. Les explications sont encouragées!
Réponses:
MATL ,
1716 octetsEssayez-le en ligne!
(-1 octet grâce à @Luis Mendo.)
(Par rapport au centre de la matrice, chaque 1 est un mouvement de chevalier valide.)
t&l
- Former une matrice nxn de tous les 1 (où n est l'entrée). Que ce soit M.[2K0]
- Poussez un tableau contenant [2, 4, 0] sur la pileB
- Convertissez tout en binaire, rembourrez avec 0 au besoin2:&Zv
- Miroir que sur les deux dimensions, sans répéter la dernière ligne / colonne ("indexation de plage symétrique"). Cela nous donne la matrice requise K.Z+
- Effectuez une convolution 2D de K sur la matrice précédente M (conv2(M, K, 'same')
), en résumant les 1 aux cibles de mouvement de chevalier légal pour chaque positionLa matrice des résultats s'affiche implicitement.
la source
11043370BP5e
mais ce n'est pas plus court ...Python 2 , 81 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 88 octets
Renvoie une chaîne.
Essayez-le en ligne!
Comment?
JavaScript (ES7), 107 octets
Une implémentation naïve qui essaie réellement tous les mouvements.
Essayez-le en ligne!
la source
Gelée ,
23 22 1410 octetsUn lien monadique donnant une liste plate - utilise l'idée d'abord utilisée par KSab dans leur réponse Python - les mouvements de chevalier ont des "côtés" 1 et 2, les seuls facteurs de 2.
Essayez-le en ligne! (le pied de page appelle le seul lien du programme, puis formate le résultat sous forme de grille)
²Ḷdðạ²§ċ5)
Comment?
Précédent 22 octets
Un programme complet (dû à
³
).Essayez-le en ligne! (le pied de page appelle le seul lien du programme, puis formate le résultat sous forme de grille)
Trouve tous les coups et compte ceux qui atterrissent sur le plateau
probablementdéfinitivement battables en calculant (peut-être battable en changeant la logique "atterrir sur le plateau").la source
APL (Dyalog Classic) , 18 octets
Essayez-le en ligne!
⎕
entrée évaluée N2⍴⎕
deux exemplaires de N⍳2⍴⎕
les indices d'une matrice N × N - une matrice de vecteurs de longueur 2∘.-⍨
soustrayez chaque paire d'indices de chaque autre paire, obtenez un tableau N × N × N × N|
valeur absolue×/¨
produit chacun2=
où sont les 2? retourne une matrice booléenne (0/1)Notez qu'un chevalier se déplace de ± 1 sur un axe et de ± 2 sur l'autre, de sorte que la valeur absolue du produit de ces étapes est 2. Comme 2 ne peut pas être pris en compte d'une autre manière, cela n'est valable que pour les mouvements de chevalier.
+/+/
somme le long de la dernière dimension, deux foisla source
RAD ,
514639 octetsEssayez-le en ligne!
Comment?
Compte le nombre de mouvements de chevalier valides pour chaque case en voyant quels mouvements de chevalier arriveraient sur le plateau:
la source
Brachylog ,
654033 octetsCela se décompose pour N plus grand que 9. Donc, je suis heureux que N ne puisse aller qu'à 8 =)
Essayez-le en ligne!
Brachylog ,
4436 octetsCelui-ci fonctionne également pour un nombre supérieur à 9
Essayez-le en ligne!
la source
⟨∋≡∋⟩
début pour générer les coordonnées de la matrice et économiser 7 octets au total (la sortie est une liste plate autorisée par OP): Essayez-la en ligne!Rétine , 161 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Convertissez en unaire.
Listez la valeur une fois pour chacune
_
dans la valeur, c'est-à-dire créez un carré.En commençant au
_
milieu de l'expression régulière, essayez de faire correspondre suffisamment de contexte pour déterminer si chacun des huit mouvements du chevalier est possible. Chaque motif capture un seul caractère si la correspondance réussit. J'ai essayé d'utiliser des groupes nommés pour que le nombre de captures soit directement égal au résultat souhaité, mais cela coûte 15 octets.Concatène toutes les captures réussies et prends la longueur.
la source
Wolfram Language (Mathematica) , 34 octets
Encore un autre Mathematica intégré.
Renvoie une liste aplatie.
Essayez-le en ligne!
la source
Python 2 ,
114103 10392 octetsEssayez-le en ligne!
la source
C (gcc) ,
133125 octetsCette solution devrait fonctionner sur n'importe quelle planche.
Essayez-le en ligne!
la source