Secuencia creciente de Quine

18

Debe escribir una secuencia de 10 programas p1 p2 ... p10que satisfagan las siguientes propiedades:

  • pKgrabados pK+1para Kde 1 a 9
  • p10 huellas dactilares p10
  • Cuando Kse concatenan los primeros programas, se p1...pKimprime el programa resultante p1...pK.
  • Cada programa pKdebe ser más grande en bytes que el programa anterior pK-1.
  • Todos los programas deben estar en el mismo idioma.
  • Se permiten las funciones incorporadas de quining (por ejemplo, Qen muchos idiomas).

Su puntaje es la suma de los recuentos de bytes de los 10 programas. Como solo hay diez programas, debe hacer que sus códigos sean lo más cortos posible. Buena suerte.

Conor O'Brien
fuente
"Cada programa pK debe ser más grande en bytes que el programa anterior pK-1" - ¿por qué este extraño requisito?
nicael
66
@nicael Porque es una secuencia de quine creciente .
Conor O'Brien
¿Por qué se imprime p10 y no p11? Eso hace que el problema sea un poco más difícil.
SuperJedi224
@ SuperJedi224 Porque simplemente no hay p11.
Conor O'Brien
Este desafío habría sido mucho más interesante si se hubieran prohibido las funciones de quining incorporadas.
Dennis

Respuestas:

15

En serio, 245 bytes:

Los diez programas concatenados:

Q9ucQc8<WX#dXεj0WX.Q9ucQc8<WX#dXεj0WX.
Q9ucQc8<WX#dXεj0WX.

Q9ucQc8<WX#dXεj0WX.


Q9ucQc8<WX#dXεj0WX.



Q9ucQc8<WX#dXεj0WX.




Q9ucQc8<WX#dXεj0WX.





Q9ucQc8<WX#dXεj0WX.






Q9ucQc8<WX#dXεj0WX.







Q9ucQc8<WX#dXεj0WX.









Hay caracteres invisibles que se vuelven visibles cuando se ejecutan, una propiedad extraña del byte 7F. Las nuevas líneas finales en cada programa son significativas. De hecho, Seriously automáticamente agrega nuevas líneas a su salida, lo desee o no. Esto solo cuenta el número de nuevas líneas en la salida, y tan pronto como ese número excede 8, elimina el último carácter de salida. Como tal, p1..pKse imprimirá p1..pKpara todos los K> 4.

Q                                  Push source code.
 9uc                               Push \n
    Qc                             Push the number of times it appears in source code.
      8<                           Check if it appears more than 8 times.
        WX     0WX                 If so, run the included code.
          #dX                      Convert string to list, dequeue and discard a newline.
             εj                    Join list back into string.
                  .                Print and halt. (Invisible byte here.)
quintapia
fuente
1
¡Interesante! De hecho es posible.
Conor O'Brien
77
¿Puedo hacer una explicación? Leik Wat cada char duz
Seadrus
3
Debe tenerse en cuenta que esto utiliza el sistema de comillas incorporado Qque empuja el código fuente del programa.
Martin Ender
(Y señaló además que la longitud total sería en algún lugar en las proximidades de 150 bytes más tiempo sin dicha incorporado.)
quintopia
Las funciones de quining incorporadas están permitidas para este desafío.
Conor O'Brien
9

JavaScript (ES6), 985

function f(x){x<0||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(0);
 function f(x){x<1||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(1);
  function f(x){x<2||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(2);
   function f(x){x<3||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(3);
    function f(x){x<4||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(4);
     function f(x){x<5||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(5);
      function f(x){x<6||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(6);
       function f(x){x<7||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(7);
        function f(x){x<8||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(8);
         function f(x){x<9||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(9);

Entendí mal las reglas antes, por lo que mi respuesta anterior fue incorrecta.

Éste utiliza la función de elevación en lugar de la elevación variable, por lo que no depende del programa 10. De hecho, creo que es una combinación para cualquier combinación de dos o más programas concatenados.

Descargo de responsabilidad: es muy tarde en este momento, por lo que todo lo anterior podría estar completamente equivocado.

grc
fuente
No creo que necesites alertdebido a la salida de la función.
Mama Fun Roll
Oh ya veo, no importa.
Mama Fun Roll
Puede eliminar los puntos y comas finales, ahorrándole 20 bytes. (Asegúrese de actualizar la cadena de la plantilla también.)
Mama Fun Roll
1
@ ՊՓԼՃՐՊՃՈԲՍԼ Creo que los puntos y comas son necesarios para la concatenación, ya que en realidad no estoy incluyendo las líneas nuevas.
grc
No importa otra vez, entonces.
Mama Fun Roll
9

Javascript ES6, 1935 bytes

Diez programas:

a=_=>{t=`a=${a};a()`;setTimeout(_=>alert(t.length>200?t:";".repeat(82)+'a=_=>{/*  */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\\s)+g,"$0$1"):u)};a();'))};a()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*  */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*   */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*    */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*     */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*      */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*       */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*        */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*         */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*          */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
SuperJedi224
fuente
44
Esto es hermoso a la vista.
Conor O'Brien
44
Todos esos puntos y comas adicionales solo para garantizar que el programa 2 sea más largo que el programa 1 ...
SuperJedi224
¿Podría usar la expresión regular (\S)+y la sustitución $0$1para guardar algunos bytes?
Martin Ender
@ MartinBüttner Probablemente, lo intentaré esta tarde
SuperJedi224
2

𝔼𝕊𝕄𝕚𝕟 2, 214 caracteres / 334 bytes

ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
 ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
  ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
   ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
    ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
     ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
      ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
       ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
        ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
         ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)

Try it here (Firefox only).

Explicación

ℹ)                // quine function: get source code
  đ ⬭ď9)          // are there 9 spaces in a row anywhere in the source?
        ?ℹ):      // if so, pass the source itself to implicit output
            ⬭+ℹ) // otherwise, add a leading space to the source and pass to implicit output

El programa cuenta las búsquedas de 9 espacios seguidos, que es la cantidad de espacios iniciales en el décimo programa. Si encuentra una coincidencia, se genera el código fuente; de lo contrario, se genera el código fuente, liderado por un espacio.

Mama Fun Roll
fuente
¿Qué codificación estás usando? Parece ser 284 bytes en la codificación ISO 8859-1. Probado aquí
Downgoat
Estoy usando UTF-8.
Mama Fun Roll
Olvidé que es ESmin 2, así que leí el recuento de caracteres como "2,214 caracteres": P
Conor O'Brien