Burlesque, 40 bytes
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh
Explicación:
Burlesque cuenta con funciones avanzadas de manipulación de código y pila. De hecho, no puede acceder al código fuente del programa, pero puede acceder al código restante que se ejecutará en el futuro. Esto significa #Q
que devolverá todo el código que le sigue, por lo que tenemos que agregar todo #Q
a ese código, que es con lo que estamos haciendo ri#Q
.
blsq ) #Q1 2++
12 -- this is the result of 1 2++
{1 2 ++} -- this is the result of #Q
++1 2
es un código técnicamente ilegal ya que está basado en pila. Pero podemos manipular el código para que se ejecute como 1 2++
:
blsq ) #Q<-#q++1 2
12
Trabajar con estos elementos integrados es increíblemente complicado y nadie los ha utilizado para nada productivo, excepto para cosas relacionadas con quine. Si inviertes ++1 2
, obtienes 2 1++
lo que produciría 21
y no 12
. La razón que produce el código anterior 12
es porque #Q
también incluye el<-
lo que al final terminamos ejecutando mucho más que solo 2 1++
: p. Terminamos ejecutando lo 2 1++#q<-
que produce 12
.
En realidad, podemos reemplazar cosas en nuestro código, por ejemplo, este código reemplaza todas las ocurrencias de ?+
sí mismo con?*
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