Escriba un programa (o función) (llamémoslo P1), que cuando se ejecuta, genera otro programa P2 del mismo lenguaje y exactamente 1 byte más largo que P1.
El programa P2 cuando se ejecuta, debería generar un tercer programa P3 que sea 1 byte más largo que P2. P3 debe generar un programa P4 que sea un byte más largo que P3, etc. Lo mismo para P5, P6, ..., P∞.
La cadena del programa debe ir indefinidamente o a un lugar donde el intérprete ya no pueda manejar (pero debe permanecer como un programa teóricamente válido en el lenguaje)
Reglas
- Lagunas estándar prohibidas
- Todos los programas de la cadena deben estar en un idioma.
- No se da entrada. La salida va a stdout o al valor de retorno de la función
- El programa debe finalizar después de un período de tiempo. Un programa que deja de generar resultados después de un cierto punto de tiempo pero nunca termina no califica
¡El programa más corto P1 en bytes en cada idioma gana!
"puts <<2*2,2\nputs <<2*2,2\n\n2"
crece en 2 en cada iteración en Ruby. No pude encontrar nada mejor. : - /. Interesante desafío!Respuestas:
JavaScript (ES6),
1412 bytes-2 bytes gracias a @Shaggy
Fragmento de prueba
Mostrar fragmento de código
fuente
"f=_"
antepone un extra_
antes del nombre del parámetro, lo que hace que aumente de longitud cada iteración.7 , 4 bytes de ASCII
Pruébalo en línea!
Sé que 7 normalmente no está codificado en ASCII, pero esta vez es una codificación más conveniente, por lo que estamos agregando 1 byte con cada ejecución, no 3 bits.
Tampoco estoy seguro de si esto cuenta como trampa o no. (Es habitual no estar claro si un 7 quine está engañando, ya que se extiende a lo largo de la frontera de varias maneras). Puede hacer un argumento decente de que
0
codifica el6
, pero en general no está claro de dónde provienen los caracteres resultantes " "en 7 porque tiene muchos comportamientos implícitos bastante extraños.Este programa se imprime con
1
adjunto, y lo hará incluso si le agrega una serie de1
s. Aquí hay un rastro de depuración comentado de160311
:(No quedan
|
en el programa, por lo quee
saldrá inmediatamente del programa como un efecto secundario, lo que significa que el final7
nunca se ejecuta).La confusión básica acerca de dónde provienen todos los caracteres es que la mayoría de los comandos en 7 solo producen datos cuando se ejecutan, y luego
6
intenta reconstruir una secuencia de comandos que produciría el fragmento de datos dado; esto a menudo termina cerca, pero no idéntico al original. (Para fines de combinación, normalmente escribe un programa 7 de tal manera que el resultado será casi el mismo, normalmente diferirá en los7
s iniciales o finales ). Así, por ejemplo, se1
convierte en los datos716
, que es la forma más fácil de agregar1
a la cadena de datos actual. Originalmente lo produjimos con16
una secuencia de caracteres diferente (pero similar), eliminando destructivamente uno de los|
marcadores con los que comenzaron los datos. (¡Creo que quizás el mejor argumento de que esto no es una quine literal es que la salida es diferente de la entrada!)fuente
Haskell ,
7466 bytesEDITAR:
<>
, luego -6 moviendo el(10*)<$>
.Esto ahora usa el
<>
operador recientemente libre (laSemigroup
multiplicación requiere que GHC 8.4 funcione sin importar).Pruébalo en línea! (Trucos con una importación ya que TIO aún no tiene GHC 8.4).
Cómo funciona
main=putStr$
es repetitivo para generar el siguiente valor de cadena.fst<>show
es una función que toma una tupla y devuelve una cadena que consiste en el primer elemento de la tupla concatenado con la representación de cadena de la tupla. Es decir(10*)<$>
multiplica el último elemento de la siguiente tupla por 10, agregando un dígito0
a su representación de cadena.fuente
(<>)
(10*)<$>
.C (gcc) ,
134132 bytesLigera reelaboración de la canina C quine. Terriblemente largo.
Pruébalo en línea!
fuente
Fisión 2 , 7 bytes
Pruébalo en línea!
La quine de fisión estándar , pero con un extra
!
que imprime un 0x01 adicional al comienzo del código en cada iteración.fuente
Pari / GP , 35 bytes
Pruébalo en línea!
fuente
Python 2 , 38 bytes
Pruébalo en línea!
fuente
brainfuck , 420 bytes
Pruébalo en línea!
Esta es una modificación en la quine "estándar" BrainFuck , con un
.
final que agrega un extra en.
cada iteración.La quine misma codifica los caracteres de Brainfuck como una pila de dígitos hexadecimales: específicamente, los dígitos hexadecimales de
c-0x2b
, que convenientemente son los siguientes:La codificación cubre dos fragmentos de código:
>++[[>>+[>]++>++[<]<-]>+[>]<+<+++[<]<+]>>->[>]++++>++
empuja la codificación de la codificación misma,[[<++++++++++++++++>-]<+++++++++.<]
recorre la pila e imprime todo.fuente
Sucio , 9 bytes
Pruébalo en línea!
Si se permite la lectura del código fuente:
Sucio , 8 bytes
Pruébalo en línea!
Explicado:
Puede ser valido:
Sucio , 4 bytes
Pruébalo en línea!
Imprime el código fuente con una nueva línea final.
(Y un montón de espacios, debido a un error. Sin embargo, funciona igual sin ellos).
Tenga en cuenta que solo funciona en el conjunto de caracteres nativos, y no cuando usa el front-end UTF8, por lo que para probarlo en TIO debe reemplazar el carácter que genera entre
[]
s‼
, que es el equivalente UTF8 para lo que está imprimiendo .fuente
Java 8,
162146bytesPruébalo en línea.
Pruebe el primer programa de salida ; Pruebe el segundo programa de salida ; Prueba el tercer programa de salida .
Explicación:
quine -parte:
String s
contiene el código fuente sin formato.%s
se utiliza para ingresar esta cadena en sí misma con els.format(...)
.%c
,%1$c
y34
se usan para formatear las comillas dobles.s.format(s,34,s)
lo pone todo juntoParte del desafío:
+1
agrega un 1 tanto al programa sin formato como al formato..replaceAll("1+$","");}
: Debido a que solo queremos aumentar el conteo de bytes del programa en uno en lugar de dos, eliminamos los 1 finales antes de regresar.fuente
> <> , 9 bytes
Pruébalo en línea!
Variación en un clásico> <> quine, que simplemente agrega otro comando de duplicación para copiar
#
el frente.fuente
Perl 5 , 32 bytes
Pruébalo en línea!
fuente
GolfScript , 9 bytes
Pruébalo en línea!
CJam , 9 bytes
Pruébalo en línea!
Estoy publicando ambas soluciones en la misma respuesta, ya que son solo variaciones triviales entre sí y funcionan exactamente de la misma manera. Ambos se basan en la quine común de GolfScript
{'.~'}.~
(o{"_~"}_~
en CJam), que se describe con más detalle, por ejemplo, en esta respuesta anterior mía.La única diferencia es que esta variante agrega un
1
byte al final de su salida. Como sucede, cualquier cadena de1
s (o cualquier otro literal entero sin ceros a la izquierda) es en sí misma una quiv trivial tanto en GolfScript como en CJam, por lo que cualquiera que esté presente al final del código anterior simplemente se copiará textualmente a la salida. Dado que GolfScript (y CJam) usan enteros de longitud arbitraria, esto funcionará para programas arbitrariamente largos, al menos mientras la computadora que ejecuta el código tenga suficiente memoria para almacenarlo.fuente
Agregado ,
767261 bytesPruébalo en línea!
Quine estándar que agrega un espacio al final de
x
cada iteración.Primeras iteraciones:
etc.
Adjunto, 72 bytes
Pruébalo en línea!
Esto es simplemente una variación del formato estándar quine, con una variable
y
que se establece10*y
después de cada iteraciónLas primeras iteraciones:
etc.
fuente
Swift 4 , 89 bytes
Incluye una nueva línea final
Pruébalo en línea!
fuente
Haskell , 88 bytes
Pruébalo en línea! Crece anteponiendo
#
a la cadena de datos.fuente
show
ingiriendo más que solo una cadena y utilizando la coincidencia de patrones. Pruébalo en línea!Stax ,
2018 bytesEjecutar y depurarlo
Genera un espacio adicional antes de la segunda comilla cada iteración.
Explicación
Utiliza el programa
"34s+cTZL "34s+cTZL
para explicar.fuente
Jstx , 4 bytes
Pruébalo en línea!
fuente
Encantamientos rúnicos , 6 bytes
Pruébalo en línea!
Copia directa de esta respuesta en un desafío relacionado. Dio la casualidad de que ya crecía en 1 byte cada iteración (un argumento fuerte para este desafío es un duplicado de ese o viceversa).
fuente
Jalea , 11 bytes
Pruébalo en línea!
fuente
Maravilla , 33 bytes
Una variante interesante de la quine normal que agrega un 1 después de cada iteración.
Progresión:
Explicación
Una de las partes interesantes de este quine es que Wonder puede trabajar con números de precisión arbitraria, por lo que la progresión no se interrumpirá después de una cierta cantidad de unos.
fuente
ColdFusion, 277 bytes
Esta es una modificación trivial de mi quine ColdFusion que agrega una nueva línea cada vez que se llama.
Probado localmente en lucee-express-5.2.6.60
fuente
Lote de Windows,
3836 bytesEste código crea un archivo llamado "q", que contiene la letra 'q', y luego lo agrega al archivo original. Tenga en cuenta que "::" es un alias para "rem" que no requiere un espacio adicional.
Guardado 2 bytes gracias al usuario 3493001.
fuente
Gol> <> , 7 bytes
Pruébalo en línea! Pruébalo en línea !! Pruébalo en línea !!!
Esta es una variación simple de la quine Gol> <> normal pero agrega una copia de
H
cada vez que se ejecuta. Como elH
comando detiene el programa, adicionalH
al final no cambia el comportamiento.fuente
T-SQL , 175 bytes
Primero escribí un quine SQL, luego lo modifiqué para agregar un espacio extra (algo inspirado por esta respuesta ).
fuente
Befunge-98 (PyFunge) ,
2219 bytesPruébalo en línea!
Agrega un <antes de la última "cada generación.
fuente
C # (compilador interactivo de Visual C #) , 89 bytes
Inspirado por la respuesta de Kevin Cruijssen.
Pruébalo en línea!
fuente