Escriba un programa completo que tome una entrada entera booleana o no negativa. Debería:
- Emite su propio código fuente si el valor de entrada es falso
- Emite su propio código fuente en reversa si el valor de entrada es verdadero
Su programa no puede ser palindrómico, ni puede leer su propio código fuente de ninguna manera.
Este es el código de golf: el código más corto en bytes gana.
Respuestas:
Gol> <> , 9 bytes
Me siento un poco incómodo al publicar esto, ya que tenemos respuestas> <>, Vitsy y Minkolang. Las únicas adiciones al quine estándar son
I
(leer entrada entera),?
(ejecutar luego si es verdadero) yr
(apilar inversa).Pruébalo en línea .
fuente
sP#Hr?I"
CJam,
1716 bytesPruébalo aquí.
Una modificación bastante directa del quine estándar. Otras soluciones para 17 bytes:
Si puedo suponer que la entrada es solo 0 o 1 (como sustituto de un booleano, para el que no hay un tipo dedicado en CJam), obtengo 15 omitiendo
g
:Explicación
fuente
g
.Pyth, 17 bytes
Una modificación directa del estándar Pyth quine.
fuente
> <>, 17 bytes
Requiere el indicador -v (+1 byte) para insertar la entrada en la pila (o para que pueda poner la entrada en la pila de antemano en el intérprete en línea).
Puede hacer lo siguiente para la misma cantidad de bytes (sin el indicador) si solo se permitieran entradas enteras (es decir, 0 para falsedad, 1 para verdad).
Pruébalo en línea
Verdad / falsedad para> <> son cualquier cosa que no sea 0 y 0, respectivamente.
fuente
Vitsy , 15 bytes
... Estoy ... estoy ganando a CJam! (grita) ¡Mamá! Mira, ma, lo hice.
Explicación:
Nueva versión de Vitsy , 11 bytes
fuente
Javascript (ES6), 42 bytes
Esta es una modificación de mi Bling Quine . También es el doble de largo.
fuente
prompt()
es necesario, a menos que cambiemos a Node.JS. Creo que$=_=>(A=`$=${$};$(prompt())`,alert(_?A:[...A].reverse().join``));$(prompt())
funciona correctamente, aunque tal vez podría jugar más golf.Burlesque, 40 bytes
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 haciendori#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 como1 2++
: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
, obtienes2 1++
lo que produciría21
y no12
. La razón que produce el código anterior12
es porque#Q
también incluye el<-
lo que al final terminamos ejecutando mucho más que solo2 1++
: p. Terminamos ejecutando lo2 1++#q<-
que produce12
.En realidad, podemos reemplazar cosas en nuestro código, por ejemplo, este código reemplaza todas las ocurrencias de
?+
sí mismo con?*
Uso:
fuente
Haskell,
126118108 bytesEspera
0
o1
como entrada.fuente
Minkolang 0.10 , 13 bytes
Pruébalo aquí
Esto es exactamente igual que el quine estándar a excepción de estas cuatro caracteres:
n,?r
.n
toma un número entero de la entrada, lo,
invierte, por lo que?
omiter
si la entrada es verdadera. De lo contrario,r
invierte la pila para que salga en orden inverso.fuente
Python 2, 51 bytes
fuente
Java 10 (programa completo), 282 bytes
Pruébalo en línea.
Java 10 (como función lambda), 154 bytes
Pruébalo en línea.
Explicación:
explicación quine :
var s
contiene el código fuente sin formato%s
se utiliza para poner esta cadena en sí misma cons.format(...)
%c
,%1$c
y34
se utilizan para formatear las comillas dobless.format(s,34,s)
lo pone todo juntoY luego
new StringBuffer(s).reverse()
se usa para revertir la cadena de quine si es necesario en función de la entrada booleana.fuente
05AB1E , 21 bytes
Pruébalo en línea.
La modificación de la forma predeterminada quine
0"D34çý"D34çý
añadiendo‚sè
.Explicación:
PD: Imprime automáticamente una nueva línea final. Si esto también se invierte, son 23 bytes en su lugar:
Pruébalo en línea. (
?
es una impresión explícita sin nueva línea )fuente