Una quine 1-up es un programa que es muy similar a una quine. La principal diferencia es que, en lugar de imprimirse una vez, cuando se concatenan n copias del programa, el resultado imprime el programa original n + 1 veces.
Ejemplo
Si su programa es Abc123:
Abc123 -> Abc123Abc123
Abc123Abc123 -> Abc123Abc123Abc123
Abc123Abc123Abc123 -> Abc123Abc123Abc123Abc123
Reto
Su desafío es crear la quine 1-up válida más corta en cualquier idioma. Se aplican las reglas habituales de quine, por lo que no puede:
- Envía el programa vacío.
- Directamente o indirectamente lea 1 el código fuente.
- Utilice las funciones integradas de comillas.
Este es el código de golf, por lo que gana el código más corto en bytes.
1 Esto no incluye el uso de una cadena codificada o un bloque de código como parte de su programa.
code-golf
quine
code-generation
ETHproducciones
fuente
fuente

nestá limitado por alguna restricción de tipo de datos (tamaño entero máximo, etc.)?Respuestas:
GolfScript, 12 bytes
Pruébalo en línea!
Explicación
Esto combina ideas del quine estándar de GolfScript:
Y mi quine recientemente descubierta :
La idea principal es nuevamente usar el
nque está impreso implícitamente al final del programa para obtener la copia adicional de la quine. Dado que la asignación de la variable no cambia nada cuando se realiza nuevamente en copias posteriores, esto solo agregará una copia. Aquí hay un desglose del código:fuente
GolfScript, 12 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
tres copias de 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 dos copias del código fuente, la pila ahora contiene
Se ejecutó
putscon la intención de imprimir la pila envuelta, seguido de un salto de línea.putsse define como{print n print}, por lo que hace lo siguiente.printimprime la copia envuelta de la pila sin inspeccionarla (es decir, sin convertirla en su representación de cadena). Esto envía(el código fuente) a STDOUT 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 anteriormente.:comienza guardando[{: ".~"][} ".~"]el carácter de espacio, luego se".~"empuja a sí mismo, lo]envuelve".~"en una matriz y[establece un nuevo marcador de matriz.nempuja 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,
printimprime el elemento de la pila superior sin inspeccionarlo, enviandoa STDOUT, subiendo 1 el código fuente.
fuente
Javascript ES6 (REPL), 55 bytes
¡Guardado 2 bytes gracias a @ user81655!
Explicación
Aquí está el marco estándar de quine:
Debería poder ver este marco dentro del envío. Más explicación a continuación.
Este es el contador, predeterminado en 1. Básicamente, nos dice cuánto repetir el quine y los incrementos al mismo tiempo.
Esta es la parte quine. Esencialmente repetimos la cadena de quine por el contador + 1. Las llamadas a funciones posteriores anularán la salida.
fuente
a).varCJam, 14 bytes
Pruébalo en línea!
Cómo funciona
Después de que se haya ejecutado la última copia del programa, la matriz que contiene el bloque y la cadena todavía está en la pila, por lo que se imprime implícitamente.
fuente
Groovy, 83 bytes
Hay una nueva línea incrustada y sin cola. Esto imprime:
La función
f()imprime una copia de la quine. El programa inicial lo llama dos veces. La primera línea del código adjunto se convierte en un comentario y solof()se ejecuta la segunda llamada a .fuente
Ruby, 43 bytes
Por sí mismo, esto se imprime
2-0o se imprime2veces. Cuando se concatena con otra copia de sí mismo, la declaración de impresión final se ve$><<s%s*n=2-01, lo que significa que se genera solo una vez (01siendo octal 1). Entonces, solo la copia final de la cadena se imprime dos veces, las otras se imprimen una vez.La asignación en línea a
nes solo para que el orden de las operaciones funcione correctamente; En realidad, el estado no se pasa de una copia a la siguiente.fuente
NodoJS,
63616055 bytesesto también funcionará en JavaScript (ES6) si considera que varios mensajes de la consola están separados por líneas nuevas (no se requiere REPL)
Guardado 2 bytes gracias a @ dev-null
tenga en cuenta que hay una nueva línea al final del código.
Este fue uno interesante, definitivamente uno de mis favoritos para este sitio hasta ahora.
Estoy bastante seguro de que esto no se puede jugar mucho más. (tal vez la
printfunción de SpiderMonkey ...)Explicación
fuente
(f=_=Puede que esté un poco cansado.Ruby, 55 bytes
Nada muy interesante aquí, es solo una quina de rubí normal con un contador.
fuente
JavaScript (ES6), 164 bytes
Funciona en cualquier página o consola de prueba de JS en Firefox, suponiendo que el espacio entre dos mensajes de la consola cuenta como una nueva línea.
fuente
windowathis.Perl 6 ,
5853 bytesGracias a Jo King por -5 bytes.
Basado en la quine de Jo King .
Pruébalo en línea!
fuente
Japt, 40 bytes
¡Pruébelo en línea! Explicación por venir.
fuente
Y
Sin competencia, 6 bytes
Y es un cañón de cabeza que he tenido por un tiempo, y esto me inspiró a escribirlo. Está hecho para desafíos en los que la secuencia es clave, como esta. El código se divide en enlaces por caracteres de "nodo". En este caso, nuestro código se coloca en dos cadenas (originalmente), siendo el nodo
C.Uregistra una cadena trascendental, es decir, una que abarca enlaces. Graba hasta que se encuentra con otroU. Si aUno se cumple al final de la cadena, se envuelve. Además,Use incluye en la cadena de forma predeterminada. Después de grabar la cadena, procedemos al nodoC, que simplemente nos mueve al siguiente enlace.nempuja el número de cadenas. Para nuestro caso base, este 2. Para una secuencia deKcadenas, hayK+2cadenas, comoKnodos.*es la repittion de cadenas.pimprime toda la pila (en este caso, una cadena) yxfinaliza el programa.En un texto:
Pruébalo aquí!
fuente
Uademás de quining? (Felicidades por 7k, por cierto)Brachylog , 20 bytes
Pruébalo en línea!
Modificado de esta quine.
Cuando esto se concatena consigo mismo, cada ruta, excepto la última, falla y el programa pasa a la siguiente, ejecutando cada una
w₃y retrocediendo cada unaw₅excepto la última.Pruébalo en línea!
Pruébalo en línea!
Pruébalo en línea!
fuente