Votre tâche consiste à écrire un programme (ou une fonction) qui prendra une chaîne en entrée et ajoutera du texte au début de chaque ligne qui satisfait aux règles suivantes:
- Le texte ajouté doit contenir le numéro de ligne. Vous pouvez utiliser une indexation basée sur 0 ou 1.
- Le texte doit être un commentaire dans votre langue. Un commentaire est défini comme un morceau de code syntaxiquement valide qui n'apporte aucune modification à l'état du programme. La suppression du commentaire ne devrait pas modifier le programme.
- Le commentaire ne peut contenir que des sauts de ligne à la fin de celui-ci.
- Il n'est pas nécessaire de mettre des numéros de ligne pour les lignes qui contiennent uniquement des espaces et des commentaires.
Caractéristiques
- Vous pouvez supposer que l'entrée sera un programme valide dans votre langue.
- Dans les langages sensibles à l'indentation comme Python, vous pouvez placer le commentaire du numéro de ligne après toute indentation. Vous pouvez choisir des tabulations ou des espaces comme caractère d'indentation, mais vous devez le spécifier sur votre message.
- Vous pouvez supposer que chaque instruction du code occupera au maximum l'intégralité d'une ligne; c'est-à-dire pas de chaînes multi-lignes ou de poursuite de barre oblique inverse.
Cas de test
Python:
#0
a = int(input())
#1
while a:
#2
print(a)
C: (Honnêtement, je suis surpris que cela compile)
/*0 */#include <stdio.h>
/*1 */int main()
/*2 */{
/*3 */ char c;
/*4 */ c = getchar();
/*5 */ do
/*6 */ {
/*7 */ putchar(c);
/*8 */ }
/*9 */ while (c);
/*10*/}
Il s'agit de code-golf , donc la réponse la plus courte (en octets) l'emporte.
code-golf
code-generation
comment
Esolanging Fruit
la source
la source
AssertionError
moins que la trace de la pile ne contienne la phrasefoo.py
, qui devait provenir d'un nom de fichier mais pourrait également apparaître comme un commentaire de ligne dans le contexte.Réponses:
Pyke, 7 octets
Essayez-le ici!
Je déclare les commentaires entiers comme étant l'entier suivi du caractère
K
puis de la ligne. Un octet supplémentaire est utilisé pour empêcher l'opcode newline de se déclencher et d'imprimer une chose supplémentaire.la source
Perl, 8 + 1 = 9 octets
Exécutez avec
-p
(1 octet de pénalité). (Remarque pour les personnes qui ne connaissent pas les règles PPCG; vous devez également spécifier une version moderne de la syntaxe Perl à l'aide-M5.010
, mais nous avons décidé que les options de sélection des versions linguistiques sont gratuites et n'encourent pas de pénalité d'octet, donc je ne l'ai pas mentionné dans la version originale de cet article.)-p
place le programme dans une boucle implicite; il fait essentiellement que le programme devienne un filtre qui traite chaque ligne séparément (c'est-à-dire que le programme entier est exécuté sur la première ligne, puis la deuxième, puis la troisième, etc.). Perl garde également la trace d'un numéro de ligne, appelé$.
, qui enregistre le nombre de lignes d'entrée lues. Donc, tout ce que fait le programme est de laisser-p
lire une ligne d'entrée; sortie a#
, le numéro de ligne actuel ($.
) et un retour à la ligne (say
ajoute un retour à la ligne par défaut, ce qui est utile dans ce cas, et est également plus court que le plus souvent vuprint
); puis en laissant-p
sortir la ligne de code d'origine qu'il a lue (généralement un programme utilisant-p
ferait une sorte de traitement sur l'entrée, mais parce que nous ne l'avons pas fait, c'est juste une sortie inchangée). Les commentaires en Perl vont de#
à une nouvelle ligne (le#
dans le programme lui-même ne démarre pas de commentaire car il est à l'intérieur d'un littéral de chaîne), donc ce que nous faisons essentiellement est de saisir l'occasion d'écrire des lignes de commentaires dans le fichier pendant que nous le traitons , sans perturber le cycle de lecture et d'écriture "naturel" de-p
.la source
-p
boucle ou un numéro de ligne à mise à jour automatique.say"$.;"
cela fonctionnerait également, car la question spécifiait que «vous pouvez supposer que chaque instruction du code occupera au plus l'intégralité d'une ligne».Javascript,
4339 octetsMerci à ETH et Conor pour avoir économisé 4 octets.
la source
/*${++b}*/
)) (utilisez une chaîne de formatage)a=>a.replace(/^/gm,_=>`/*${++b}*/`,b=0)
V , 10 octets
Essayez-le en ligne!
la source
Lot, 91 octets
Batch n'a aucun moyen de lire STDIN jusqu'à EOF, donc le nom de fichier doit être passé en tant que paramètre de ligne de commande.
la source
Lua,
8075 octetsEnregistré quelques octets en abusant de la jauge.
Réponse de démarrage assez simple.
Non golfé, +
la source
--[[10]]
qui est 1 caractère plus long que--[[9]]
si vous le remplissez correctement avec des espaces.Gema,
1615 caractèresDans Gema, il n'y a que des commentaires de ligne, en commençant par
!
.Exemple d'exécution:
Ce qui suit est de répondre à la question d' Adám , s'il est possible d'ajouter le numéro de ligne en nature de code ignoré.
Code Gema est essentiellement une collection de de = à des règles de transformation, ou modèle = mesures en termes Gema. Je ne vois aucun moyen de définir un modèle qui ne correspondra jamais à rien, cela ne semble pas être le seul moyen.
Gema, 18 personnages
Se transforme
e=3
enc:=1;:e=3
.Heureusement, à Gema, il existe des domaines , une sorte d'espaces de noms. Le code ci-dessus définit les règles factices dans l'espace de noms c, que nous n'utilisons jamais. Malheureusement, un domaine mentionné reste en vigueur jusqu'à la fin de la ligne, nous devons donc explicitement revenir au domaine par défaut.
Gema, 18 personnages
Se transforme
e=3
en1=$0;e=3
.Une alternative moins compliquée consiste à utiliser du code sans effet au lieu d'en ignorer un. Je veux remettre exactement ce qui était assorti.
la source
e=3
transformé auif (false) { 1 }; e=3
lieu du courant!1e=3
? Oui, il y aurait une solution de contournement longue de 19 caractères.Qbasic,
9189 octetsContribution:
Production:
la source
BASH (+ GNU sed) 27 octets
La première partie (
i#
\n
=
) fonctionne presque dans GNU sed (pour 4 octets), mais elle met une nouvelle ligne après le#
.la source
awk (
1913 octets)19 octets : cet insert "#" + numéro de ligne au-dessus de chaque ligne de code
13 octets : crédit et merci à @manatwork pour deux solutions de 13 octets
Par
1
défaut, l'action estprint $0
:Ou en remplaçant le
$0
contenula source
{print"#"NR}1
ou$0="#"NR RS$0
?Fonction d'extension Kotlin,
6960 octetsfun String.a()=lines().mapIndexed{i,s->"/*$i*/$s"}.joinToString("\n")
fun String.a(){lines().mapIndexed{i,s->println("/*$i*/$s")}}
Exemple d'utilisation:
Production:
la source
CJam, 21 octets
Je ne connais pas du tout CJam du tout, mais je savais pertinemment qu'il a des commentaires :)
Explication à venir.
la source
oNo
peut être remplacé parn
sur TIO.Mathematica, 58 octets
la source
jq, 31 caractères
(Code de 27 caractères + options de ligne de commande de 4 caractères.)
Dans jq, il n'y a que des commentaires de ligne, en commençant par
#
.Exemple d'exécution:
la source
input_line_number
. Être Thanksgiving, un sentiment spécial à exprimer$.
?GolfScript, 23 octets
Il n'y a que des commentaires de ligne commençant par "#".
Non golfé et expliqué:
Je suis à peu près sûr que cela peut être encore simplifié, en particulier le
i
peut probablement être omis.Vous pouvez le tester ici: https://golfscript.apphb.com/ Parce que ce site ne prend pas en charge l'ajout d'entrées, vous devrez mettre une chaîne entourée de guillemets doubles devant le code.
'\n'
sera une nouvelle ligne. Soyez conscient du fait qu'il existe également d'autres séquences d'échappement. Utilisateur'\\'
si vous n'êtes pas sûr.la source
C # 6,
6661 octetsMerci à CSharpie
(666, code des diables ^^)plus ...Cela fonctionne pour tous les langages utilisant des "commentaires de style C" (C, C ++, C #, Java, ....)
Il divise simplement la chaîne en lignes, ajoute chaque ligne à son index et joint à nouveau les lignes modifiées avec de nouveaux caractères de ligne.
ancienne version:
la source
Python 2, 82 octets
Fonctionne pour l'indentation d'espace uniquement
Version sans indentation pour 56 octets
la source