Burleska, 40 bajtów
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh
Wyjaśnienie:
Burlesque ma zaawansowane wbudowane funkcje manipulacji stosami i kodami. W rzeczywistości nie można uzyskać dostępu do kodu źródłowego programu, ale można uzyskać dostęp do pozostałego kodu, który ma zostać wykonany w przyszłości. Oznacza to, #Q
że zwróci cały kod, który następuje po nim, dlatego musimy dodać wszystko #Q
do tego kodu, co robimy ri#Q
.
blsq ) #Q1 2++
12 -- this is the result of 1 2++
{1 2 ++} -- this is the result of #Q
++1 2
jest technicznie nielegalnym kodem, ponieważ jest oparty na stosie. Ale możemy manipulować kodem, aby działał jako 1 2++
:
blsq ) #Q<-#q++1 2
12
Praca z tymi wbudowanymi funkcjami jest niezwykle trudna i nikt jeszcze ich nie wykorzystał do niczego produktywnego oprócz rzeczy związanych z quine. Jeśli się odwrócisz ++1 2
, otrzymasz to, 2 1++
co wytworzy, 21
a nie wyprodukuje 12
. Powodem, dla którego powyższy kod 12
jest generowany, jest #Q
także to, że <-
w rezultacie wykonujemy o wiele więcej niż tylko 2 1++
: p. W końcu wykonujemy to, 2 1++#q<-
co produkuje 12
.
Możemy faktycznie zastąpić rzeczy w naszym kodzie, na przykład ten kod zastępuje wszystkie wystąpienia ?+
w sobie?*
blsq ) #Q(?+)(?*)r~5.-#q5 5?+
25
Stosowanie:
$ 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