Tarea
- Tome un solo carácter Unicode como entrada.
- Imprime un programa en el mismo lenguaje que también obedece esta especificación, pero que no contiene el carácter de entrada.
- Si el programa se ejecuta con la entrada de una , y luego el programa de salida se ejecute con la entrada b , entonces el programa se emite se PERMITIDA para contener el carácter de una . Sin embargo, b todavía no puede aparecer en este programa. En otras palabras, solo está prohibido que aparezca la entrada en la encarnación más reciente del programa.
- Independientemente de lo que diga el título, se aplican las reglas estándar de quine.
El programa más corto gana. El programa debe tener al menos un byte de largo.
Ejemplo
Si el programa es ABCD. (# es un comentario)
> slangi "ABCD"
A
EBCD # "FBCD" "JGGJ" "UGDKJGDJK" are all OK
> slangi "EBCD"
C
ABGD # "EBGD" "UIHDAIUTD" are all OK
> slangi "ABGD"
B
AFCD
> slangi "AFCD"
Z
ABCD
¿Dónde slangi
está un intérprete para un lenguaje ficticio?
code-golf
restricted-source
quine
Akangka
fuente
fuente
e
.e
, pero Gadsby lo hace.Respuestas:
CJam,
45413835 bytesSi el carácter de entrada no es ninguno de los caracteres
"$&)+,/:?HOX\_`el{}
, este programa imprime la siguiente versión ligeramente modificada de sí mismo. Pruébalo en línea!De lo contrario, el programa imprime la siguiente versión ofuscada de la modificación. Pruébalo en línea!
Tenga en cuenta que algunos de los caracteres no se pueden imprimir. Pruébalo en línea!
Cómo funciona
En el primer programa de salida posible, evitamos usarlo
~
para poder usarlo en el otro programa. Por lo tanto, en lugar de_~
, el programa modificado termina conOX$_?
, que funciona de la siguiente manera.Finalmente, en el programa de salida restante,
envuelve todos esos caracteres en una matriz, por lo tanto, empuja la siguiente cadena.
If-
resta 18 de cada código de caracteres, empujando la cadenaque
~
el evalúa.fuente
JavaScript (ES6),
356340327308303263Ahora usando
Function`...```
para el segundo programa:La función se empaqueta en uno de los tres posibles programas:
El primer programa invoca
eval
un literal de cadena que contiene el código de la función con cada carácter escapado como un valor octal.El segundo programa redirige el navegador a una
javascript:
URL que contiene el código de la función con cada URL de caracteres codificada. Esta es la única forma en que podría pensar para evaluar el código sin usar paréntesis. También escapa a las letras en 'eval'.El último programa es dolorosamente largo. Crea el código de la función agregando uno (
+9-8
) a la vez para obtener cada código de caracteres. Esto es para evitar el uso de los dígitos octales.El programa correcto se indexa buscando una cadena cuidadosamente construida para el carácter de entrada:
Aquí hay una versión no probada y sin golf. Es posible que no funcione debido a las nuevas líneas en la fuente.
fuente
function f(){ ... };f()
puede ser(f=_=>{ ... })()
. Aquí hay un ejemplo: es6fiddle.net/iiz2nq0lf=(_=prompt())=>...;f()
. La entrada se almacena como_
.Function`[code]`.call``;
trabajo para usted, en lugar de redirigir? Aquí hay un ejemplo de trabajo: es6fiddle.net/ij023v49 (¿Ves?evil()
¡ No ! Erm, quiero decireval()
...)this
objeto será esa cadena de plantilla vacía. Se basa en elFunction
constructor, que le permite crear una función, en lugar de ejecutarlaeval()
. La función tendrá el código contenido dentro del primer parámetro. Lo uso mucho para obtener lo realwindow
, usandoFunction('return this')()
. Como no puede usar()
, he abusado un poco de la amabilidad de ES6 para tratar de escupir una función utilizable sin la que pueda ejecutar()
. Para eso, necesita el.call()
método, que llama a la función con un nuevothis
objeto.