Aux échecs, la notation Forsyth-Edwards , plus communément appelée "FEN", est une manière textuelle de transcrire les tableaux. Il décrit chacune des huit rangées du plateau (appelées "rangs" aux échecs) de haut en bas du point de vue de White. Les pièces sont écrites comme K (roi), Q (reine), R (tour), B (évêque), N (chevalier) et P (pion). Les pièces noires utilisent ces lettres en minuscules et les pièces blanches utilisent ces lettres en majuscules. Les espaces vides sont indiqués par un nombre de 1 à 8 indiquant le nombre d'espaces vides consécutifs. Un rang complètement vide serait 8
, une seule tour noire dans la colonne la plus à droite (appelée "fichiers" dans les échecs) serait 7r
, et deux pions blancs à chaque extrémité d'une rangée seraient PP4PP
. Les rangs sont séparés par un/
. Il y a normalement d' autres informations ajoutées, ce qui indique de quel côté est de se déplacer, roque et en passant les droits, numéro de mouvement, et l' horloge halfmove, mais nous les ignorer dans le cadre de ce défi.
Contribution
Une chaîne FEN, depuis la ligne de commande ou STDIN, à votre guise. Vous pouvez supposer que cette chaîne est toujours valide.
Production
Écrivez à STDOUT une simple représentation artistique ASCII du tableau tel qu'il apparaîtrait en fait:
- Les pièces sont représentées par leur caractère dans FEN
- Les carrés vides sont représentés par des espaces
- Les morceaux et les carrés sont séparés par un tuyau
|
et il y a des tuyaux de chaque côté de la planche
Ainsi, un tableau vide, écrit comme 8/8/8/8/8/8/8/8
dans FEN, apparaîtrait comme
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
La position de départ d'une partie d'échecs est écrite comme rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
, et apparaîtrait comme
|r|n|b|q|k|b|n|r|
|p|p|p|p|p|p|p|p|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
|P|P|P|P|P|P|P|P|
|R|N|B|Q|K|B|N|R|
La position finale d' Anderssen-Kieseritzky 1851 , appelée "The Immortal Game" dans la communauté d'échecs, est écrite ainsi r1bk3r/p2pBpNp/n4n2/1p1NP2P/6P1/3P4/P1P1K3/q5b1
, et votre programme, une fois alimenté, produira:
|r| |b|k| | | |r|
|p| | |p|B|p|N|p|
|n| | | | |n| | |
| |p| |N|P| | |P|
| | | | | | |P| |
| | | |P| | | | |
|P| |P| |K| | | |
|q| | | | | |b| |
+1
pour un défi intéressant.-2
pour avoir accepté la mauvaise réponse sans raison valableRéponses:
Perl, 28 octets
Comprend +2 pour
-lp
Donnez votre avis sur STDIN
fen.pl
:En fait dans la ligue de certaines langues de golf ...
Notez que la version basée sur fichier a besoin de la nouvelle ligne finale dans le fichier afin que l'on soit vraiment 29 octets. Mais la version en ligne de commande n'a pas besoin de cette nouvelle ligne supplémentaire et donc le code compte pour 28 octets:
la source
Rétine, 13 octets
Essayez-le en ligne!
Explication
La première partie (notez l'espace de fin):
est de convertir un au nombre spécifique d'espaces. La rétine a une
$*
fonction à répéter. La façon dont cela fonctionne est:<num>$*<char>
s'il n'y en a pas<num>
, Retina assumera$&
ou la chaîne correspondante, dans ce cas le numéro correspondant.La partie suivante:
est assez simple, il remplace tout
/
avec ce¶
qui est une nouvelle ligne.La dernière partie fonctionne de la même façon:
Cela remplacera tout (d'où pourquoi il n'y a rien sur la première ligne) par
|
. Mettre un|
partout.la source
S`/
comme deuxième étape.Rubis -
75827876756259585756 octetsEnregistré quelques octets grâce à Ventero
Laissez-moi vous expliquer (en
\n
remplaçant la nouvelle ligne littérale):Cela renvoie implicitement la valeur de la chaîne, chacune étant
/
remplacée par une nouvelle ligne (par défaut,$/
contient une nouvelle ligne)C'est super simple; c'est juste une chaîne contenant un tuyau, une interpolation de chaîne et un autre tuyau. L'interpolation de chaîne est évaluée
Cela remplace chaque numéro par autant d'espaces. Je peux économiser quelques octets en trouvant également des retours à la ligne ici; car
hex
renvoie 0 si la chaîne n'est pas un nombre valide, lorsqu'il trouve une nouvelle ligne - c'est-à-dire celle à la fin du résultat degets
- il la remplace par une chaîne de longueur 0, la supprimant effectivement. Sans cela, il y aurait un tuyau de fuite.$&
est une variable magique qui représente le texte complet de la dernière correspondance de variable, ce qui me permet de sauvegarder un octet en éliminant|d|
. Je peux enregistrer un autre octet en utilisant.hex
au lieu de.to_i
, ce qui fonctionne parce que chaque nombre est inférieur à 9, ce qui signifie que hexadécimal et décimal ont les mêmes valeurs.Cela met un tuyau entre chaque personnage. Notez que c'est ce qui place les tuyaux de chaque côté des lignes (sauf le premier et le dernier) car les barres obliques, qui finissent par se transformer en sauts de ligne
tr
, comptent comme des caractères et sont donc entourées de tuyaux. Le?|
juste signifie "la chaîne d'un caractère"|"
".Et c'est tout. C'est un programme franchement scandaleusement simple. Il utilise juste beaucoup d'astuces de syntaxe sournoises.
la source
puts"|#{gets.gsub(/\d|\n/){' '*$&.hex}.chars*?|}|".split'/'
(bien sûr, remplacez le\n
par une nouvelle ligne littérale).Pyth -
242221 octetsSuite de tests .
la source
Pyth, 23 octets
Essayez-le en ligne!
Comment ça fonctionne:
la source
JavaScript ES7,
8070 octetsEst une fonction anonyme qui accepte une chaîne en entrée.
Approche ES6 de 80 octets uniquement.
Explication
Nous utilisons une compréhension de tableau pour parcourir la liste:
Cela équivaut à:
Si c'est un nombre, nous avons ce nombre d'espaces. Si c'est le cas
/
, nous avons une nouvelle ligne. Sinon, nous avons le personnage. Ensuite, nous rejoignons la compréhension avec rien pour faire une chaîne.Ensuite, nous créons un tableau de longueur 3
[,...that,"\n"]
....
éclate la compréhension jointe en caractères. Rejoindre cela donne le résultat.la source
[x for(x of a)]
) sont ES7.Julia, 62 octets
Il s'agit d'une fonction anonyme qui accepte une chaîne et renvoie un tableau de chaînes. Pour l'appeler, affectez-le à une variable.
L'approche est la même que dans intelligent Ruby QPaysTaxes réponse . Nous remplaçons chaque chiffre dans l'entrée par autant d'espaces, nous plaçons
|
entre chaque caractère, nous plaçons|
sur le devant et le dos, et nous divisons en un tableau/
.Essayez-le en ligne!
la source
05AB1E , 21 octets
Code:
De plus 21 octets:
'|¹9GNNð×:}S'|«JJ'/¶:
.Utilise l' encodage CP-1252 . Essayez-le en ligne! .
la source
JavaScript (ES6),
696762 octetsLes virgules supplémentaires créent des valeurs vides dans la division externe, ce qui crée les caractères de début et de fin
|
. Vous avez besoin de deux virgules de fin car les virgules de fin sont facultatives à la fin des listes, donc la première fait toujours partie de l'élément précédent.Edit: 5 octets enregistrés grâce à @ user81655.
la source
/[\d/]/g,c=>+c?` `.repeat(c):`\n`
marcherait?Rétine ,
5045 octetsC'était amusant haha. Non seulement je suis un noob à Retina, mais aussi dans les regex en général ... Cela peut probablement être beaucoup joué au golf , donc je ferai plus de recherches.
Code:
Essayez-le en ligne!
la source
$*
fonctionnalité :)Jolf, 28 octets
Remplacez-le
♣
par le personnage\x05
ou essayez-le ici!la source
Python 3.5, 112 octets:
Essayez-le en ligne! (Ideone)
la source
C, 252 octets
Essai détaillé en ligne
la source
JavaScript (FireFox 30+), 61
Utiliser une compréhension de tableau qui n'est plus EcmaScript standard
Tester
la source
Lua, 106 octets
Non golfé
la source
print((...):gsub(".",function(c)return(c:find("%d")and("| "):rep(c)or c=="/"and"|\n"or"|"..c)end).."|")
print((...):gsub("%d",function(c)return("| "):rep(c)end):gsub("/","|\n"):gsub("([^%d%s|])","|%1").."|")
pour le même nombre d'octets.print((...):gsub("%d",function(c)return("| "):rep(c)end):gsub("([^%d |])","|%1"):gsub("/","\n").."|")
est de 101 octetsR (hors compétition)
Désolé si ce n'est pas approprié de poster ceci, mais je pensais que c'était cool d'avoir juste une fonction qui traîne qui fonctionne réellement pour cette question sans modification! Il imprime cependant la sortie unicode plutôt que l'ascii. Je ne me souviens pas vraiment pourquoi je l'ai écrit, mais ce n'était pas pour répondre à un défi.
la source
Haskell, 110 octets
Non golfé:
la source
Java 7,
190184 octetsEssai détaillé en ligne
la source
Pyke,
2520 octetsExplication:
Essayez-le ici!
la source
Python, 84 octets
Explication:
la source
> <>, 64 octets
4 octets gaspillés en raison de problèmes d'alignement, je ne sais pas comment les jouer au golf. ¯ \ _ (ツ) _ / ¯
la source