Crescente sequenza di quine


18

Devi scrivere una sequenza di 10 programmi p1 p2 ... p10che soddisfano le seguenti proprietà:

  • pKstampe pK+1per K1-9
  • p10 stampe p10
  • Quando i primi Kprogrammi vengono concatenati, viene p1...pKstampato il programma risultante p1...pK.
  • Ogni programma pKdeve avere una dimensione in byte maggiore rispetto al programma precedente pK-1.
  • Tutti i programmi devono essere nella stessa lingua.
  • Sono consentite funzioni di quining integrate (ad es. QIn molte lingue).

Il tuo punteggio è la somma dei conteggi dei byte dei 10 programmi. Poiché ci sono solo dieci programmi, è necessario rendere i codici più corti possibile. In bocca al lupo.


"Ogni programma pK deve avere una dimensione in byte maggiore rispetto al precedente programma pK-1" - eh, perché questo strano requisito?
nicael,

6
@nicael Perché è una sequenza di quine in crescita .
Conor O'Brien,

Perché p10 stampa se stesso e non p11? Questo rende il problema un po 'più difficile.
SuperJedi224,

@ SuperJedi224 Perché semplicemente non c'è p11.
Conor O'Brien,

Questa sfida sarebbe stata molto più interessante se le funzioni di quining integrate fossero state vietate.
Dennis,

Risposte:


15

Scherzi a parte, 245 byte:

Tutti e dieci i programmi concatenati:

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.









Ci sono caratteri invisibili che diventano visibili quando eseguiti, una strana proprietà del byte 7F. Le nuove righe finali di ciascun programma sono significative. In effetti, Seriously aggiunge automaticamente nuove righe al suo output, che tu lo voglia o no. Questo conta solo il numero di newline nell'output e non appena quel numero supera 8, cancella l'ultimo carattere dell'output. Come tale, p1..pKstamperà p1..pKper tutti i 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
Interessante! È davvero possibile.
Conor O'Brien,

7
posso spiegare spiegazioni su ogni char duz
Seadrus,

3
Va notato che questo utilizza il quining integrato Qche spinge il codice sorgente del programma.
Martin Ender,

(E ha inoltre osservato che la lunghezza totale sarebbe da qualche parte nelle vicinanze di 150 byte più a lungo senza detto built-in.)
Quintopia

Le funzioni di quining integrate sono consentite per questa sfida.
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);

Ho frainteso le regole in precedenza, quindi la mia risposta precedente era errata.

Questo utilizza il sollevamento di funzioni anziché il sollevamento di variabili, quindi non dipende dal programma 10. In effetti, penso che sia una quine per qualsiasi combinazione di due o più programmi concatenati.

Disclaimer: è davvero tardi adesso, quindi tutto quanto sopra potrebbe essere completamente sbagliato.


Non penso che tu abbia bisogno a alertcausa dell'output della funzione.
Mama Fun Roll

Oh capisco, non importa.
Mama Fun Roll

Puoi eliminare i punti e virgola finali, risparmiando 20 byte. (Assicurati di aggiornare anche la stringa del modello all'interno.)
Mama Fun Roll

1
@ ՊՓԼՃՐՊՃՈԲՍԼ Penso che i punti e virgola siano necessari per la concatenazione, poiché in realtà non sto includendo le nuove righe.
GRC

Allora non dimenticarti mai più.
Mama Fun Roll

9

Javascript ES6, 1935 byte

Dieci programmi:

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

4
È bellissimo da vedere.
Conor O'Brien,

4
Tutti quei punti e virgola extra solo per garantire che il programma 2 sia più lungo del programma 1 ...
SuperJedi224

Potresti forse usare la regex (\S)+e la sostituzione $0$1per salvare alcuni byte?
Martin Ender,

@ MartinBüttner Probabilmente, ci proverò questo pomeriggio
SuperJedi224,

2

𝔼𝕊𝕄𝕚𝕟 2, 214 caratteri / 334 byte

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

Try it here (Firefox only).

Spiegazione

ℹ)                // 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

Il programma conta le ricerche per 9 spazi di fila, che è la quantità di spazi iniziali nel decimo programma. Se trova una corrispondenza, viene emesso il codice sorgente; in caso contrario, viene emesso il codice sorgente, guidato da uno spazio.


Quale codifica stai usando? Sembra essere 284 byte con la codifica ISO 8859-1. Testato qui
Downgoat,

Sto usando UTF-8.
Mama Fun Roll,

Ho dimenticato che è ESmin 2, quindi ho letto il conteggio dei caratteri come "2.214 caratteri": P
Conor O'Brien,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.