Bei einer positiven Verschachtelungsebene für Ganzzahlen n
und einer Zeichenfolge s
aus druckbaren ASCII-Zeichen ( to)
~
wird ein Programm ausgegeben, das bei Ausführung in derselben Sprache ein Programm ausgibt, das ein Programm ausgibt ..., das die Zeichenfolge ausgibt s
.
Es sollten insgesamt n
Programme generiert werden, die alle in derselben Sprache wie Ihre Antwort ausgeführt werden sollten.
Hinweis: Sie können Programme oder Funktionen ausgeben - alles, was Sie standardmäßig als Einreichung zulassen.
Sie können s
mit Escapezeichen eingeben, wie ein Programm oder eine Funktion in Ihrer Sprache normalerweise eine Zeichenfolge eingibt.
Beispiel
Zum Beispiel könnte ein gegebenes n=1
und s="recursion"
Python 2-Programm Folgendes ausgeben:
print "recursion"
Wenn Sie dies ausführen, würde Folgendes ausgegeben:
recursion
Gegeben n=2
und s = "PPCG", könnte ein Python 2-Programm Folgendes ausgeben:
print "print \"PPCG\" "
Ausführen dieser Ausgaben:
print "PPCG"
Ausführen dieser Ausgaben:
PPCG
Verwandte (+ Titel Inspiration): Noch eine LUL und ich bin raus
Außerdem Verwandte (in der Sandbox - jetzt gelöscht, kann aber immer noch mit ausreichender Reputation angezeigt werden): Quellcode-Rekursion
Testfälle
Stellen Sie sicher, dass Ihr Code für die folgenden Testfälle (einer pro Zeile) funktioniert:
n s
2 PPCG
4 Robert'); DROP TABLE Students;--
17 Deep
2 Spaces In Here
3 "Don't forget quotes!"
5 'Backt`cks might be a h`tch'
6 5%s
8 [Brackets]<Are>(Great){Usually}
3 !"#$%&'()*+,-./ 0123456789:;<=>?@ABCDEFGHIJKLMN
6 OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
7 THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
3 the quick brown fox jumps over the lazy dog
quelle
0
?Antworten:
Gelee , 2 Bytes
Probieren Sie es online!
hehe builtins
quelle
'"hi"'
JavaScript (ES6),
47-44Byte3 Bytes gespart dank @HermanLauenstein
Übernimmt Eingaben in der Currying-Syntax
(n)(s)
.Beispiel
Wird ausgeben:
Welches wird drucken:
Welches wird drucken:
Demo
Ein komplexeres Beispiel, bei dem
alert()
überschrieben wurde, sodass Zwischenergebnisse auf die Konsole gedruckt und automatisch ausgeführt werden.Code-Snippet anzeigen
Alternative Version, 40 Bytes
Vorgeschlagen von @Shaggy
Dieser gibt eine anonyme Funktion anstelle eines vollständigen Programms zurück.
quelle
alert
? 41 Bytesn=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT
(BT durch Backticks ersetzen)sh + coreutils, 31 Bytes
Nimmt
n
als Befehlszeilenparameter unds
auf STDIN.quelle
yes
wiederholt die Befehlszeile ausexec sed 1d $0
(das$
ist ein Shell-Metazeichen, daher muss es in Anführungszeichen gesetzt werden).sed $1q
Stoppt den Druck nach$1
(dhn
) Zeilen.cat
kopiert dann die Eingabezeichenfolge. Die resultierende Datei ist einsh
Skript, das die Shell anweist, sich durch eine Kopiesed
der Parameter1d
und des Dateinamens des Skripts zu ersetzen .sed
Überspringt dann die erste Zeile der Datei und gibt den Rest aus. Jedes Skript hat einexec sed 1d $0
Präfix weniger , bis nach dern
Ausführung nur die ursprüngliche Eingabe gedruckt wird.Python 2 , 40 Bytes
Probieren Sie es online!
-4 Bytes dank xnor
quelle
Haskell, 17 Bytes
Ab dem Zeitpunkt, an dem ich dies schreibe, ist dies die kürzeste Antwort für eine nicht golfspezifische Sprache.
Diese Funktion nimmt
s
undn
in dieser Reihenfolge und gibt das Ergebnis oder den Quellcode eines Ausdrucks zurück, der bei Auswertung den nächsten Quellcode zurückgibt.Argument dafür, warum das zählt:
Wenn
f
angegebenPPCG
und2
als Parameter angegeben, ist das Ergebnis der Text"\"PPCG\""
(erste generierte Funktion), der bei der Auswertung den Text"PPCG"
(zweite generierte Funktion) zurückgibt und bei der Auswertung zurückgibtPPCG
.Danke an nimi für den Vorschlag einer Verkürzung.
quelle
APL (Dyalog) ,
2423 Bytes-1 danke an ngn.
Dies ist ein vollständiges Programm, das nach
s
und dannn
nach fragt und nach STDOUT druckt.Probieren Sie es online!(Der Fall 17 Deep wird weggelassen, da er das Ausgabelimit von TIO überschreitet. Funktioniert offline.)
⍞
Eingabeaufforderung fürs
⊢
ergeben, dass (zu trennen⎕
und⍞
)''''{
...}⍣⎕
fordern Sien
dieses Lambda auf und wenden Sie es so oft mit einem einfachen Anführungszeichen als linkes Argument an.⍺
steht für das linke Argument (das Zitat) und⍵
steht für das rechte Argument (den Eingabetext):⍵=⍺
Boolescher Wert, bei dem der Text einem Anführungszeichen entspricht1+
füge eins hinzu⍵/⍨
Replizieren Sie jedes Zeichen des Arguments entsprechend oft⍺,
ein Zitat voranstellen⍺,⍨
ein Zitat anhängenDies funktioniert, weil Zeichenfolgen in APL durch
'
Trennzeichen und einfache Anführungszeichen in Zeichenfolgen doppelt angegeben werden, während keine anderen Zeichen maskiert werden müssen.Dyalog APL wird auch mit einem utility (
⎕SE.Dyalog.Utils.repObj
) ausgeliefert, das einen APL-Ausdruck generiert, der zu seinem Argument ausgewertet wird (ähnlich wie Jelly's uneval ). Das folgende Programm entspricht daher dem oben genannten, funktioniert jedoch für alle Arrays:Probieren Sie es online!
quelle
⍺
ob Sie das Anführungszeichen als .- übergeben möchten, um (mindestens) ein Byte zu sparen.Firefox JavaScript,
4135 BytesFirefox hat eine nette
uneval
, die macht, wie es sich anhört - ein bestimmtes Objekt, in diesem Fall eine - Zeichenfolge.quelle
Java 8,
9593 Bytes-2 Bytes dank @Lynn .
Sonderzeichen zu entkommen ist in Java so nervig.
Probieren Sie es hier aus und probieren Sie die resultierende Methode hier aus .
Erläuterung:
Zusätzliche Erklärung für den Regex-Ersatz:
Warum all diese Schrägstriche?
quelle
"
in einer Regex-Zeichenklasse entkommen müssen, also sollten\\\\\"
(fünf Backslashes) in Ordnung sein.Unterlast , 11 Bytes
Probieren Sie es online!
Die Eingabe muss auf dem Stapel beginnen, wobei die Nummer in Form einer Kirchennummer oben steht . Ich weiß nicht, ob dies eine gültige Eingabemethode ist, aber die Spezifikation hat keine Eingabe, und das Platzieren der Eingabe an der Spitze des Stapels scheint eine in solchen Sprachen verwendete gestrandete Methode zu sein.
quelle
GolfScript , 5 Bytes
Probieren Sie es online!
quelle
QuadR , 8 Bytes
Einfache Übersetzung der Antwort von ngn .
Nimmt
n
als Argument unds
als Input.Probieren Sie es online!
PCRE R rsetzen alle Instanzen
^|'|$
Zeilenanfang ODER Zitat ODER Zeilenende'&
mit einem Zitat und dem gesamten SpielDas Argument gibt an, wie oft die Umwandlung wiederholt werden soll.
quelle
R , 62 Bytes
Probieren Sie es online!
Nennen Sie es so:
f(n,s)
gefolgt vonn
Kopien von()
Eine benannte Funktion; Gibt eine anonyme Funktion zurück. Es ändert lediglich die Standardwerte von
formals
off
, sodass die resultierende Funktion aufgerufen werden kann (und dann das Ergebnis der aufgerufenenn
times). Wenn esn
erreicht ist0
, kehrt es zurücks
.R ist eigentlich gar nicht so schlecht zu entkommen! Es wird ein C-Style-Escaping verwendet, sodass Sie nur die Eingabe übernehmen,
"
mit\"
und\
mit ersetzen\\
und dann das Ganze einpacken müssen" "
.quelle
Pyth, 21 Bytes
Probieren Sie es hier aus.
Leider ist die rekursive Funktion (nicht volles Programm wie oben) länger (24 Bytes):
quelle
APL (Dyalog Classic) , 19 Byte
Probieren Sie es online!
quelle
Ruby , 34 Bytes
%p
ist ein Ruby-spezifisches printf-Flag, das deninspect
Wert seines Arguments erhält , ähnlich wie%r
in Python.$><<
bedeutet drucken.Probieren Sie es online!
quelle
Excel VBA (32-Bit), 67 Byte
Version Auf 32-Bit-Excel-VBA beschränkt, da
2^i
Auswertung in 32-Bit-VBA ohne Fehler erfolgt, in 64-Bit-VBA jedoch nichtAnonymous VBE Direkt - Fenster - Funktion , die Eingänge nimmt
n
unds
aus aus Bereichen[A1]
und[B1]
und gibt eine anonyme Funktion , dass , wenn nur ein Terminal (nach unten ausgewertetn
Iterationen) Ausgänge nurs
als dieses EndgerätSample Input / Output
quelle