Burlesco, 40 bytes
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh
Explicação:
Burlesque possui built-ins avançados de manipulação de pilha e código. De fato, você não pode acessar o código fonte do programa, mas pode acessar o código restante que será executado no futuro. Isso significa #Q
que retornará todo o código a seguir, e é por isso que precisamos adicionar tudo #Q
ao código com o qual estamos fazendo ri#Q
.
blsq ) #Q1 2++
12 -- this is the result of 1 2++
{1 2 ++} -- this is the result of #Q
++1 2
é um código tecnicamente ilegal, pois é baseado em pilha. Mas podemos manipular o código para executá-lo como 1 2++
:
blsq ) #Q<-#q++1 2
12
Trabalhar com esses built-ins é incrivelmente complicado e ninguém ainda os usou para qualquer coisa produtiva, exceto por questões relacionadas a quine. Se você inverter, ++1 2
obtém o 2 1++
que produziria 21
e não 12
. A razão pela qual o código acima produz 12
é porque #Q
também inclui o <-
modo. No final, acabamos executando muito mais do que apenas 2 1++
: p. Acabamos executando o 2 1++#q<-
que produz 12
.
Na verdade, podemos substituir coisas em nosso código, por exemplo, esse código substitui todas as ocorrências ?+
por si só por?*
blsq ) #Q(?+)(?*)r~5.-#q5 5?+
25
Uso:
$ 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