Beaucoup de personnes sur ce site utilisent des langages ésotériques , et comme ces langages sont inhabituels et difficiles à comprendre, ils écriront souvent une explication dans un certain format. Par exemple, si le code était
abcdefghijklmnop
Et cette langue utilise #
pour les commentaires, ils écriraient une explication comme celle-ci:
a #Explanation of what 'a' does
bc #Bc
d #d
e #Explanation of e
fgh #foobar
ij #hello world
k #etc.
l #so on
mn #and
op #so forth
Je le fais souvent aussi, mais chaque fois que je le fais, j'ai l'impression que créer une mise en page de texte est vraiment désagréable et prend du temps. Je souhaite donc que vous créiez un "Générateur de modèles de commentaires" pour moi. Par exemple, si nous ignorons les commentaires, le code précédent contient ce modèle:
a #
bc #
d #
e #
fgh #
ij #
k #
l #
mn #
op #
Le défi:
Vous devez écrire un programme ou une fonction prenant deux chaînes en entrée et générer ce "Esolang-Comment-Template". La première entrée sera le code, mais avec des barres ( |
) insérées à l'emplacement des nouvelles lignes. La deuxième entrée est ce que nous allons utiliser pour les commentaires. Donc, notre dernier exemple aurait ceci pour entrée:
"a|bc|d|e|fgh|ij|k|l|mn|op", "#"
Malheureusement, cela exclut les barres de la saisie de code, mais ce n'est pas grave. Vous pouvez supposer que le commentaire sera un seul caractère. Par souci de simplicité, le caractère de commentaire ne sera pas un obstacle. Le code saisi ne contiendra que du code ASCII imprimable et ne contiendra aucune nouvelle ligne.
J'espère que vous pourrez déduire quoi faire à partir des cas de test, mais je vais essayer de clarifier certaines choses.
Vous devez diviser le code saisi en "sections de code" sur chaque barre. Ensuite, chaque section de code est sortie sur sa propre ligne et complétée à gauche avec la longueur de tout le code précédent (sans les barres). Ensuite, chaque ligne est complétée à droite avec suffisamment d'espaces pour que les deux derniers caractères de chaque ligne soient "Un espace supplémentaire" + "Le caractère de commentaire".
Une nouvelle ligne est autorisée.
Voici un autre exemple. Pour l'entrée
"Hello|World", "/"
La première section de code est "Hello" et la seconde est "World". Donc, il devrait donner la sortie:
Hello /
World /
Voici quelques exemples supplémentaires:
Input:
"a|b|c|d|e|f|g", ","
Output:
a ,
b ,
c ,
d ,
e ,
f ,
g ,
Input:
"abcdefg", ":"
Output:
abcdefg :
Input:
"4|8|15|16|23|42", "%"
Output:
4 %
8 %
15 %
16 %
23 %
42 %
Input:
"E|ac|h s|ecti|on is| one c|haracte|r longer| than the| last!", "!"
Output:
E !
ac !
h s !
ecti !
on is !
one c !
haracte !
r longer !
than the !
last! !
Input:
"This|Code|has||empty||sections", "@"
Output:
This @
Code @
has @
@
empty @
@
sections @
Règles:
Vous pouvez prendre ces entrées et sorties dans n’importe quel format raisonnable. Par exemple, lire / écrire un fichier, STDIN / STOUT, arguments de fonction / renvoyer, etc. Comme d’habitude, il s’agit de code-golf , essayez donc de rendre votre code le plus court possible et vous gagnerez si vous pouvez obtenir la solution la plus courte. dans ta langue! Je choisirai également la solution la plus courte en tant que gagnant. Les échappatoires standard sont interdites.
|
personnage serait bien, alors vous pouvez vous expliquer|
)?Réponses:
Pyth -
28272423 octetsPourrait être capable de jouer au golf un peu.Beaucoup, apparemment!Essayez-le en ligne ici .
la source
Retina ,
35 à34 octetsLe nombre d'octets suppose un codage ISO 8859-1.
Les deux chaînes d'entrée sont séparées par un espace (ce qui est sans ambiguïté puisque nous savons que le délimiteur de commentaire est toujours un caractère unique).
Essayez-le en ligne!
la source
Java 10,
189159 octets-30 octets convertissant Java 7 en Java 10 et optimisant les boucles.
Essayez-le en ligne.
Explication:
la source
Pyke,
312824 octetsEssayez-le ici!
la source
JavaScript (ES6), 92 octets
la source
GNU sed (85 + 1 pour -r) 86
Les entrées sont des chaînes séparées par un espace.
Tests:
input.txt:
Sortie:
la source
:
est une fonctionnalité / bogue GNU sed et\S
j’estime être une extension, alors peut-être que le titre devrait l'êtreGNU sed
. Autre que cela, excellent code.Haskell,
139135 octetsSauvegardé 4 octets en insérant une définition.
Ungolfed:
la source
Groovy,
120113111 octetsnon golfé *
(Premier brouillon avec 120 octets)
non golfé *
Des tests
la source
.padRight(s.replace('|','').size()+1)+c)
Python 2,
125 124132 octets-1 octet grâce à @TuukkaX (manque de jouer au golf dans l'espace
i, v
)Tous les cas de test sur ideone
la source
c
comme caractère de commentaire, pas#
.Python 2,
10710510299 octetsTesté avec tous les cas de test ci-dessus
EDIT Golfed off 2 octets en changeant d = a.split ("|"); i = 0 à d, i = a.split ("|"), 0 Je ne sais pas comment j'ai raté celui-ci. Merci @ Oliver Ni
Encore 3 octets partis. Merci encore.
La suggestion de @ Jonathan économise en réalité 3 octets et la ramène à la magie 99. Merci.
la source
" "*i
de ave 2 octetslen(e)
aimerfor e in d:z=len(e)....
enregistrer un octet, car il est utilisé deux fois05AB1E ,
29383129 octetsPeut certainement être golfed, mais au moins son travail maintenant ..
+9 octets car
¡
(split) supprime les éléments vides automatiquement, donc je devais ajouter'|„ǝʒ:'ǝ¡'ʒм
..-2 octets grâce à @MagicOctopusUrn en changeant
'|„ǝʒ:'ǝ¡'ʒм
à'|¶:.BεðÜ}
(solution actuelle ne fonctionne pas éléments avec des espaces de fin, mais je suppose que cela est autorisé selon les cas de test).Essayez-le en ligne.
Explication:
la source
ǝʒ
.'|¶:.B
pourrait travailler tho.'|¶:.B
?.B
une seconde fois après avoir ajouté les espaces précédents..B
présent.'|¶:.BεðÜ}εD®>úsg®+©s}.BεðIJ,
? 29 octets. Retour à l'itération 1 :)..B
se scinde en nouvelles lignes, une caractéristique que peu de gens connaissent. C'est le seul moyen que je connaisse de garder des éléments vides. Je demanderais cela comme une fonctionnalité..¡
devrait signifier scinder, mais garder les éléments vides ..PowerShell v2 +,
103 à99 octetsPrend les entrées sous forme de deux chaînes,
-split
s la première sur un tube littéral (puisque split utilise la syntaxe regex) et insère les éléments dans une boucle|%{...}
.À chaque itération, nous construisons une chaîne comme étant un nombre d'espaces définis par
$l
concaténation avec l'élément en cours. Pour la première boucle,$l
initialise à$null
, qui est évalué ici comme0
.Cette chaîne est encore concaténé avec un autre nombre d'espaces (définis par combien de temps
$a
serait si nous-replace
d tous les tuyaux avec rien, plus1
pour le rembourrage supplémentaire entre le code et les commentaires, moins le.length
de l'élément courant, moins ce$l
qui est combien de places nous rembourrés laissé sur cette itération), concaténé avec notre caractère de commentaire$b
. Cela reste sur le pipeline.Nous mettons ensuite à jour
$l
pour la prochaine itération.Les chaînes résultantes sont toutes laissées sur le pipeline et la sortie via implicite
Write-Output
se produit lors de l'exécution du programme, avec une nouvelle ligne entre elles par défaut.Exemples
la source
Vim,
3938 frappes-1 octet grâce à DJMcMayhem
Attend en entrée un tampon (par exemple, un fichier) dont le premier caractère est le délimiteur de commentaire, suivi du code, par exemple
#foo|bar|baz
.Explication
("
_
" désigne un espace littéral.)la source
mm
dem`
puis changer`m
à<C-o>
Floroïde - 94 octets
Utilise une approche similaire à la solution @ JonathanAllan s Python.
Testcases
la source
C #
176167154 octetsNon Golfé
Une solution LINQ aurait été de 146 mais il fallait la
using System.Linq;
ramener à 164:Anciennes solutions:
167 octets:
176 octets en interpolation de chaîne
la source
PHP,
120117116110109 octetsou
la source
MATL ,
3331 octetsEssayez-le en ligne!
Explication
La fonction intégrée
Yd
(blkdiag
), qui construit une matrice bloc-diagonale à partir de ses entrées, effectue la majeure partie du travail. Les valeurs de remplissage dans la matrice sont 0 et le caractère 0 est traité comme un espace pour l'affichage. Le code serait simplement scindé|
, construit une matrice à partir des blocs résultants, converti en caractères et ajouté deux colonnes avec un espace et un symbole de commentaire.Cependant, la possibilité de sections vides dans la chaîne d'entrée
compliquele problème: le bloc résultant serait vide et ne s'afficherait donc pas dans la matrice résultante.Pour résoudre ce problème, nous introduisons un caractère 0 avant chaque caractère
|
, ainsi aucun bloc ne sera vide; puis, dans la matrice de caractères obtenue, nous supprimons les colonnes formées par le caractère 0 uniquement. Une section de code non vide aura un caractère imprimable ASCII et les colonnes qu'elle contient survivront. Une section vide contribuera à une ligne, mais n'introduira pas de colonne supplémentaire.la source
|
( correspond à la sous-expression avant ou après le|
) en a besoin, du moins dans le moteur d'expressions rationnelles Matlab / OctavePyth, 30 octets
ou
Les deux sont des programmes complets qui prennent une entrée sur STDIN de la chaîne de commentaire, puis la chaîne de programme, séparée par une nouvelle ligne.
Essayez la première version en ligne
Essayez la deuxième version en ligne
Comment ils travaillent
la source
Dyalog APL 16.0 (non compétitif),
4337 octetsInvite le caractère de commentaire, puis le code.
Non compétitif car la version 16.0 est plus récente que ce défi.
la source
Perl, 63 octets
Comprend +5 pour
-Xpi
Exécuter avec une entrée sur STDIN et un caractère de commentaire après -i:
esolang.pl
:Solution simple et totalement ennuyeuse
la source
Turtlèd , 35 bytes (non compétitif)
Prend une entrée, le dernier caractère est le caractère de commentaire. Ne fonctionne pas avec le caractère de commentaire comme espace, mais je suppose que ce n'est pas nécessaire.
Explication:
la source
Funky , 89 octets
Essayez-le en ligne!
la source
Scala, 123 octets
Code de test + sortie:
la source
Ruby,
96 à80 octetsVoir sur eval.in: https://eval.in/639012
Je devrais vraiment apprendre la rétine.
la source
Gelée , 41 octets
Cela semble avoir beaucoup trop progressé, et probablement trop de liens ...
Testez-le sur TryItOnline
Comment?
la source
CJam, 32 octets
Explication
Essayez-le en ligne
la source
GolfScript, 85 octets
Essayez-le en ligne
Mise à jour 2017 - GolfScript - 71 octets
Explication
la source
Gelée , 10 octets
Essayez-le en ligne!
la source