En este desafío, escribirá un programa que genera un programa que es el doble de la longitud del programa original. El programa generado debería generar un nuevo programa, un programa que duplique su longitud.
Ejemplos
Si mi programa es a
:
< a
> aa
< aa
> aaaa
< aaaa
> aaaaaaaa
Reglas
- No hay complementos de quine
- El programa original debe tener al menos un byte
- La secuencia teóricamente debería funcionar infinitamente
- Su programa no puede leer nada (archivo, stdio)
Su puntaje es del tamaño del programa original.
code-golf
sequence
quine
code-generation
Downgoat
fuente
fuente
Respuestas:
CJam, 10 bytes
Pruébalo aquí.
Explicación
fuente
JavaScript,
626137 bytes¡Gracias a @ Doᴡɴɢᴏᴀᴛ por la ayuda!
Original [37 bytes]:
Niño [74 bytes]:
Nieto [148 bytes]:
Alternativo (con impresión a la consola y como programa completo):
Original [61 bytes]:
Niño [122 bytes]:
Nieto [244 bytes]:
¡Cómo funciona!
1.
f=_=>
Defina la función f comoconsole.log(...)
2.
;f()
Ejecutar la función f.3. (en la función f)
console.log(...)
Imprima lo siguiente:f=
texto literal "f ="${'_'.repeat((0+f).length+5)
"_" repetido para la longitud de f, alterado para tener en cuenta los caracteres no incluidos en la cadena de f+f}
La stringificación de la función f;f()
texto literal "; f ()"Notas
console.log
es necesario en lugar dealert
porquealert
no parece funcionar bien con cadenas realmente largas (al menos en la configuración de mi máquina / navegador)_
's se insertan en el nombre del parámetro (no utilizado) de la función f, para garantizar que se incluyan en la cadena de f.console.log
) de la primera solución sobre la segunda: agregar10
a la función en lugar de0
convertirla en cadena hace que sea un byte más, eliminando la necesidad de agregar 1 a la longitud posterior, ahorrando un byte.fuente
0+f
también debería funcionar para convertir la función en una cadena(f=_=>`(f=${'_'.repeat((0+f).length+5)+f})()`)()
Minkolang 0.15 ,
1914 bytesOriginal , hijo , nieto .
Explicación
Lo que hace el bit entre
r
s es duplicar el período final suficientes veces para cumplir el criterio de duplicación..
es el carácter "detener programa", por lo que los muchos períodos al final no hacen nada excepto estar allí.fuente
CJam, 12 bytes
Cuando se ejecuta, esto imprimirá
que, a su vez, imprimirá
y así.
Pruébalo en línea!
fuente
Python 3, 51 bytes
Esto incluye una nueva línea final.
Qué salidas:
fuente
GolfScript, 11 bytes
Pruébalo en línea!
Cómo funciona el código fuente
Si el código fuente anterior se ejecuta una vez, la pila terminará como
donde la cadena vacía al principio corresponde al estado inicial de la pila (entrada vacía).
Dos copias del código fuente dejarían un estado final de
y así.
Que pasa despues
Después de ejecutar el código fuente, el intérprete hace lo siguiente:
Envuelve toda la pila en una matriz y empuja esa matriz en la pila.
Para una sola copia del código fuente, la pila ahora contiene
Se ejecutó
puts
con la intención de imprimir la pila envuelta, seguido de un salto de línea.puts
se define como{print n print}
, por lo que hace lo siguiente.print
imprime la copia envuelta de la pila sin inspeccionarla (es decir, sin convertirla en su representación de cadena). Esto envíaSTDOUT y muestra la copia de la pila desde la parte superior de la pila.
La pila ahora contiene
ejecuta el bloque de código que definimos previamente.
:
comienza guardando["" {: ".~"]} ".~"]
el carácter de espacio, luego se".~"
empuja y]
envuelve la pila en una matriz.n
empuja una cadena que consiste en un solo salto de línea.La pila ahora contiene
se ejecuta una vez más. Sin embargo, se redefinió cuando lo llamamos por primera vez y ahora contiene una matriz, no un bloque de código.
De hecho, empuja
["" {: ".~"]} ".~"]
, dejando la pila comoFinalmente,
print
imprime el elemento de la pila superior sin inspeccionarlo, enviandoa STDOUT.
fuente
𝔼𝕊𝕄𝕚𝕟, 26 caracteres / 36 bytes
Try it here (Firefox only).
Tenga en cuenta que hay una nueva línea final.
Explicación
Quine estándar:
⟮ⒸⅩ222+ᶈ0
Modificaciones:
ô
función para generar los quines de todos los resultados en lugar del último resultado (como se hace con la salida implícita)\u27ee⦃ᶈ0}\u27ef\n
y cierre el bloque de copia para evitar conflictos con los bloques de copia posteriores.ď2
para repetir la cuerda dos veces.fuente