Code Golf
Völlig echte Hintergrundgeschichte: Ich arbeite als Auftragnehmer an einer Website www. Sky.Net und eine unserer Aufgaben ist es, ein selbstbewusstes Programm oder so etwas zu erstellen. Ich weiß nicht, dass ich dem Chef nicht wirklich zugehört habe. Um unseren Code selbstbewusster zu machen, muss die IT wissen, welcher Code in jeder Zeilennummer enthalten ist.
Herausforderung
Erstellen Sie ein Programm oder eine Funktion, die eine Eingabe akzeptiert n
und den Code des Programms oder der Funktion online zurückgibt n
.
Regeln
➊ Ihr Programm oder Ihre Funktion muss mindestens 4 Zeilen lang sein. Jede Zeile muss eindeutig sein.
➋ Sie können davon ausgehen, dass die Eingabe immer eine positive Ganzzahl größer oder gleich 1 und kleiner oder gleich der Anzahl der Zeilen in Ihrem Programm / Ihrer Funktion ist.
➌ Die erste Zeile in Ihrem Programm / Ihrer Funktion ist Zeile 1, nicht Zeile 0.
➍ Sie können nicht auf die Datei zugreifen, auf der sich Ihr Programm befindet. (Wenn jemand fragen muss: "Ist das nicht die Regel Nr. 4, die technisch bricht?", Ist es wahrscheinlich.)
➎ Zeilen können nicht leer sein (dies schließt ein Leerzeichen ein, wenn Leerzeichen in Ihrer Sprache nichts bewirken )
➏ Zeilen können keine // Kommentare sein (/ * eines beliebigen <! - Stils)
Dies ist eine quine- ähnliche Herausforderung.
Dies ist Code-Golf , also gewinnt die Einsendung mit den wenigsten Bytes!
Antworten:
Vim, 7 Bytes
Probieren Sie es online!
Soweit ich das beurteilen kann, entspricht dies allen Regeln. In vim druckt das leere Programm standardmäßig alle Eingaben aus. Schon seit
Ist ein Noop, ändert sich der Eingabetext nicht, und da jede Eingabe mit der gewünschten Ausgabe übereinstimmt, funktioniert derselbe Ansatz mit einer beliebigen Anzahl von Zeilen.
quelle
Ruby,
717066 BytesProbieren Sie es online!
"Cheating" -Modus: 7 + 1 = 8 Bytes
Benötigt das
-p
Flag für +1 Byte. Buchstäblich eine Kopie der V-Antwort . Gibt die eingegebene Nummer aus. Das gesamte Programm ist praktisch nur No-Ops.quelle
-p
das?$_
, führt den Programminhalt aus und druckt dann den Inhalt$_
auf dem Bildschirm aus (Wiederholung pro STDIN-Zeile). Da das Programm nichts tut, ist es praktisch nur Unixcat
, aber das bedeutet, dass jede Eingabe von 1-4 den Inhalt der Zeile ausgibt, da jede Zeile buchstäblich ihre Zeilennummer ist.-p
, ist aber1\n2\n3\n4
kein gültiges Perl-Programm.Haskell,
69-59BytesBasierend auf dem Standard Haskell Quine. Der erste Ausdruck (über die ersten drei Zeilen verteilt) ist eine unbenannte Funktion, die die n-te Zeile aus der quinifizierten Zeichenfolge
s
(s++show s
) auswählt . +2 Bytes für die Indizierung auf 1-Basis (imho eine unnötige Regel).Für eine Online ausprobieren! version Ich muss die Funktion benennen, die 4 Bytes hinzufügt.
quelle
PowerShell ,
184172 ByteProbieren Sie es online!
Erläuterung
Beginnt mit dem Erstellen eines Arrays
$v
in der ersten Zeile. In derselben Zeile wird das erste (0
th) Element auf gesetzt0
, und ein Komma,
setzt seine Definition fort.Die nächste Zeile setzt das nächste Element (
1
) des Arrays auf eine Zeichenfolge, die den Inhalt der ersten Zeile des Skripts darstellt, sodass$v[1]
die erste Zeile zurückgegeben wird.Die 3. Zeile setzt zuerst das 3. Element des Arrays (Index
2
) auf einen String, der die 2. Zeile des Skripts darstellt, und setzt dann in derselben Zeile das 4. Element (Index3
) unter Verwendung eines Quine-Snippets, das den Formatoperator (-f
) zum Ersetzen verwendet bestimmte Instanzen von einfachen Anführungszeichen ([char]39
) und der Formatvorlagenzeichenfolge in sich selbst, um die gesamte dritte Zeile zu reproduzieren.Zeile 4 macht im Grunde das Gleiche, beendet aber auch die Erstellung des Arrays und indiziert es dann mit dem angegebenen Argument.
quelle
Python 2,
1047367 BytesVielen Dank an Jonathan Allan für das Speichern von 6 Bytes!
Edit: Gleiche Byteanzahl, aber mir gefällt diese Lösung besser
Probieren Sie es online!
Python-Version der Ruby-Antwort von Value Ink .
Ältere Antwort (67 Bytes):
quelle
n
: TIOCJam ,
191817 BytesProbieren Sie es online!
Basierend auf dem Standard CJam-Quine. Das
{...}_~
läuft...
mit dem Block selbst auf dem Stack (und in diesem Fall auch1
darunter). Dann machen wir:quelle
PHP, 261 Bytes
Probieren Sie es online!
Die codierte Zeichenfolge lautet:
quelle
Perl, 52 Bytes
Dies ist eine einfache Variante des klassischen Quines
Die "Nutzlast" befindet sich
split
in Zeilenumbrüchen und die richtige Zeile wird durch Indizieren in die resultierende Liste ausgewählt.Perl,
4948 Bytes (nicht konkurrierend)38 Bytes für den Code (ohne den Shebang, aber einschließlich
-d:A
) plus 10 Bytes für den Dateinamen, der sein mussDevel/A.pm
. DasDevel
Verzeichnis muss sich in befinden@INC
.Technisch gesehen verstößt dies gegen Regel 4, da
-d:A
die Datei zweimal analysiert wird und es sich somit um eine nicht konkurrierende Lösung handelt.Es verwendet einen Debugger-Hook, um auf die Zeilen der Datei zuzugreifen, die Perl
@{"_<$filename"}
zur Kompilierungszeit im Array speichert .quelle