Ihre Aufgabe ist es, ein Programm (oder eine Funktion) zu schreiben, das eine Zeichenfolge als Eingabe verwendet und Text an den Anfang jeder Zeile anfügt, die die folgenden Regeln erfüllt:
- Der angehängte Text muss die Zeilennummer enthalten. Sie können eine 0- oder 1-basierte Indizierung verwenden.
- Der Text muss ein Kommentar in Ihrer Sprache sein. Ein Kommentar ist als syntaktisch gültiger Code definiert, der den Programmstatus nicht ändert. Durch das Entfernen des Kommentars sollte das Programm nicht geändert werden.
- Der Kommentar darf nur am Ende Zeilenumbrüche enthalten.
- Sie müssen keine Zeilennummern für Zeilen eingeben, die nur Leerzeichen und Kommentare enthalten.
Spezifikationen
- Sie können davon ausgehen, dass die Eingabe ein gültiges Programm in Ihrer Sprache ist.
- In einrückungssensitiven Sprachen wie Python können Sie den Zeilennummernkommentar nach allen Einrückungen einfügen. Sie können entweder Tabulatoren oder Leerzeichen als Einrückungszeichen auswählen, dies müssen Sie jedoch in Ihrem Beitrag angeben.
- Sie können davon ausgehen, dass jede Anweisung im Code höchstens die gesamte Zeile einnimmt. dh keine mehrzeiligen Strings oder Backslash-Fortsetzungen.
Testfälle
Python:
#0
a = int(input())
#1
while a:
#2
print(a)
C: (Ehrlich gesagt, ich bin überrascht, dass dies kompiliert)
/*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*/}
Das ist Code-Golf , also gewinnt die kürzeste Antwort (in Bytes).
code-golf
code-generation
comment
Esolanging Fruit
quelle
quelle
AssertionError
auslösen , es sei denn, der Stack-Trace enthielt die Phrasefoo.py
, von der erwartet wurde, dass sie aus einem Dateinamen stammt, sie könnte aber auch als Zeilenkommentar im Kontext erscheinen.Antworten:
Pyke, 7 Bytes
Probieren Sie es hier aus!
Ich erkläre Integer-Kommentare als Integer, gefolgt vom Zeichen
K
und der Zeile. Ein zusätzliches Byte wird verwendet, um zu verhindern, dass der Newline-Opcode eintritt und eine zusätzliche Sache druckt.quelle
Perl, 8 + 1 = 9 Bytes
Laufen Sie mit
-p
(1 Byte Strafe). (Hinweis für Personen, die mit den PPCG-Regeln nicht vertraut sind; Sie müssen auch eine moderne Version der Perl-Syntax mithilfe von angeben.-M5.010
Wir haben jedoch entschieden, dass die Optionen zum Auswählen von Sprachversionen kostenlos sind und keine Byte-Strafe verursachen. Ich habe sie daher in nicht erwähnt die Originalversion dieses Beitrags.)-p
platziert das Programm in eine implizite Schleife; Im Grunde genommen wird das Programm zu einem Filter, der jede Zeile separat verarbeitet (dh das gesamte Programm wird in der ersten Zeile ausgeführt, dann in der zweiten, dann in der dritten usw.). Perl verfolgt auch eine Zeilennummer$.
, die aufzeichnet, wie viele Eingabezeilen gelesen wurden. Alles, was das Programm tut, ist-p
, eine Eingabezeile lesen zu lassen . Ausgabe a#
, die aktuelle Zeilennummer ( würde eine Art Verarbeitung für die Eingabe ausführen, aber da dies nicht der Fall ist, wird sie nur unverändert ausgegeben). Kommentare in Perl werden von zu einer neuen Zeile (dem$.
gib ) und eine neue Zeile aus ( vornehmensay
fügt standardmäßig eine neue hinzu, was in diesem Fall hilfreich ist und auch kürzer als die üblicheren istprint
); und dann-p
die ursprüngliche Codezeile ausgeben lassen , die sie gelesen hat (normalerweise ein Programm, das verwendet-p
#
#
im Programm selbst startet keinen Kommentar, da es sich um ein String-Literal handelt). Im Grunde genommen nutzen wir also die Gelegenheit, Kommentarzeilen in die Datei zu schreiben, während wir sie verarbeiten , ohne den "natürlichen" Lese- und Schreibzyklus von zu stören-p
.quelle
-p
Schleife oder eine automatisch aktualisierte Zeilennummer funktioniert.say"$.;"
dies auch funktionieren würde, da in der Frage angegeben ist, dass "Sie davon ausgehen können, dass jede Anweisung im Code höchstens die gesamte Zeile einnimmt".Javascript,
4339 BytesDank an ETH und Conor für die Einsparung von 4 Bytes.
quelle
/*${++b}*/
)) (Formatierungszeichenfolge verwenden)a=>a.replace(/^/gm,_=>`/*${++b}*/`,b=0)
V , 10 Bytes
Probieren Sie es online!
quelle
Batch, 91 Bytes
Batch kann STDIN erst nach EOF lesen. Stattdessen muss der Dateiname als Befehlszeilenparameter übergeben werden.
quelle
Lua,
8075 BytesEinige Bytes durch Missbrauch der Sprache gespart.
Einfach genug Starterantwort.
Ungolfed, +
quelle
--[[10]]
1 Zeichen länger als--[[9]]
wenn Sie ihn korrekt mit Leerzeichen auffüllen.Gema,
1615 ZeichenIn Gema gibt es nur Zeilenkommentare, beginnend mit
!
.Probelauf:
Das Folgende soll Adám antworten Frage von beantwortet, ob es möglich ist, die Zeilennummer in Form eines ignorierten Codes hinzuzufügen.
Gema-Code ist im Wesentlichen eine Sammlung von from = to- Transformationsregeln oder template = action in Gema-Begriffen. Ich sehe keine Möglichkeit, eine Vorlage zu definieren , die niemals zu etwas passt. Dies allein scheint nicht der richtige Weg zu sein.
Gema, 18 Zeichen
Verwandelt sich
e=3
inc:=1;:e=3
.Zum Glück gibt es in Gema Domains , so etwas wie Namespaces. Der obige Code definiert die Dummy-Regeln in Namespace c, die wir nie verwenden. Leider bleibt eine erwähnte Domain bis zum Ende der Zeile in Kraft, so dass wir explizit zur Standard-Domain zurückkehren müssen.
Gema, 18 Zeichen
Verwandelt sich
e=3
in1=$0;e=3
.Eine weniger komplizierte Alternative besteht darin, wirkungslosen Code zu verwenden, anstatt einen zu ignorieren. Ich meine, genau das zurückzusetzen, was zusammengebracht wurde.
quelle
e=3
verwandeltif (false) { 1 }; e=3
statt in den Strom!1e=3
? Ja, es würde eine 19 Zeichen lange Problemumgehung geben.Qbasic,
9189 BytesEingang:
Ausgabe:
quelle
BASH (+ GNU sed) 27 Bytes
Der erste Teil (
i#
\n
=
) funktioniert fast in GNU sed (für 4 Bytes), setzt aber eine neue Zeile nach dem#
.quelle
awk (
1913 bytes)19 Bytes : Fügen Sie "#" + Zeilennummer über jeder Codezeile ein
13 bytes : Dank an @manatwork für zwei 13 bytes Lösung
Als
1
Aktion standardmäßigprint $0
:Oder durch Ersetzen von
$0
Inhaltenquelle
{print"#"NR}1
oder$0="#"NR RS$0
?Kotlin-Erweiterungsfunktion,
69 bis60 Bytesfun String.a()=lines().mapIndexed{i,s->"/*$i*/$s"}.joinToString("\n")
fun String.a(){lines().mapIndexed{i,s->println("/*$i*/$s")}}
Beispielverwendung:
Ausgabe:
quelle
CJam, 21 Bytes
Ich bin überhaupt nicht mit CJam vertraut, aber ich wusste, dass es Kommentare gibt :)
Erklärung folgt in Kürze.
quelle
oNo
kann durchn
on TIO ersetzt werden.Mathematica, 58 Bytes
quelle
jq, 31 Zeichen
(27 Zeichen Code + 4 Zeichen Befehlszeilenoptionen.)
In jq gibt es nur Zeilenkommentare, beginnend mit
#
.Probelauf:
quelle
input_line_number
. Thanksgiving sein, ein besonderes Gefühl zum Ausdruck bringen$.
?GolfScript, 23 Bytes
Es gibt nur Zeilenkommentare, die mit "#" beginnen.
Ungolfed & erklärt:
Ich bin mir ziemlich sicher, dass dies weiter vereinfacht werden kann, insbesondere
i
kann das wahrscheinlich weggelassen werden.Sie können es hier testen: https://golfscript.apphb.com/ Da diese Site das Hinzufügen von Eingaben nicht unterstützt, müssen Sie dem Code eine Zeichenfolge in doppelte Anführungszeichen voranstellen.
'\n'
wird ein newline sein. Beachten Sie, dass es auch andere Escape-Sequenzen gibt. Benutzer,'\\'
wenn Sie sich nicht sicher sind.quelle
C # 6,
6661 BytesVielen Dank an CSharpie
(666, devils code ^^)nicht mehr ...Dies funktioniert für alle Sprachen, die Kommentare im C-Stil verwenden (C, C ++, C #, Java, ....).
Die Zeichenfolge wird einfach in Zeilen aufgeteilt, jede Zeile mit einem Index versehen und die bearbeiteten Zeilen erneut mit neuen Zeilenzeichen verbunden.
alte Version:
quelle
Python 2, 82 Bytes
Funktioniert nur für Einrückungen mit Leerzeichen
Einrückungsfreie Version für 56 Bytes
quelle