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.


"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.)

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.


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();

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.


¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.