Burlesque, 40 Bytes
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh
Erläuterung:
Burlesque verfügt über integrierte Funktionen zur Stapel- und Codemanipulation. Sie können zwar nicht auf den Quellcode des Programms zugreifen, aber Sie können auf den verbleibenden Code zugreifen, der in Zukunft ausgeführt werden soll. Dies bedeutet #Q
, dass der gesamte darauf folgende Code zurückgegeben wird, weshalb wir alles #Q
zu dem Code addieren müssen, mit dem wir arbeiten ri#Q
.
blsq ) #Q1 2++
12 -- this is the result of 1 2++
{1 2 ++} -- this is the result of #Q
++1 2
ist technisch illegaler Code, da er stapelbasiert ist. Wir können den Code jedoch so manipulieren, dass er wie folgt ausgeführt wird 1 2++
:
blsq ) #Q<-#q++1 2
12
Die Arbeit mit diesen integrierten Funktionen ist unglaublich knifflig und niemand hat sie bisher für produktive Zwecke verwendet, außer für quine-bezogene Dinge. Wenn du umkehrst ++1 2
bekommst du 2 1++
was produziert 21
und nicht 12
. Der Grund, warum der obige Code erzeugt, 12
ist, dass er #Q
auch das beinhaltet, <-
damit wir am Ende viel mehr ausführen als nur 2 1++
: p. Am Ende führen wir das aus, 2 1++#q<-
was produziert 12
.
Wir können tatsächlich Dinge in unserem Code ersetzen, zum Beispiel ersetzt dieser Code alle Vorkommen von sich ?+
selbst durch?*
blsq ) #Q(?+)(?*)r~5.-#q5 5?+
25
Verwendung:
$ echo "1" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
hs fi sp "-<" j +. /\ "Q#ir" -~ HS 2Q#ir
$ echo "0" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh