Croissance de la séquence Quine

18

Vous devez écrire une séquence de 10 programmes p1 p2 ... p10qui satisfont aux propriétés suivantes:

  • pKimpressions pK+1pourK de 1 à 9
  • p10 impressions p10
  • Lorsque les premiers Kprogrammes sont concaténés, le programme résultant p1...pKs'imprimep1...pK .
  • Chaque programme pK doit être plus volumineux en octets que le programme précédent pK-1.
  • Tous les programmes doivent être dans la même langue.
  • Les fonctions de quining intégrées (par exemple Qdans de nombreuses langues) sont autorisées.

Votre score est la somme du nombre d'octets des 10 programmes. Puisqu'il n'y a que dix programmes, vous devez rendre vos codes aussi courts que possible. Bonne chance.

Conor O'Brien
la source
"Chaque programme pK doit être plus grand en octets que le programme précédent pK-1" - hein, pourquoi cette étrange exigence?
nicael du
6
@nicael Parce que c'est une séquence de quine croissante .
Conor O'Brien
Pourquoi p10 s'imprime-t-il et non p11? Cela rend le problème un peu plus difficile.
SuperJedi224
@ SuperJedi224 Parce qu'il n'y a tout simplement pas de p11.
Conor O'Brien
Ce défi aurait été beaucoup plus intéressant si les fonctions de quining intégrées avaient été interdites.
Dennis

Réponses:

15

Sérieusement, 245 octets:

Les dix programmes ont concaténé:

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.









Il y a des caractères invisibles qui deviennent visibles lorsqu'ils sont exécutés, une étrange propriété de l'octet 7F. Les nouvelles lignes de fin de chaque programme sont importantes. En fait, Ser sérieusement ajoute automatiquement des nouvelles lignes à sa sortie, que vous le vouliez ou non. Cela compte simplement le nombre de sauts de ligne dans la sortie et dès que ce nombre dépasse 8, il supprime le dernier caractère de sortie. En tant que tel, p1..pKimprimera p1..pKpour tous les 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.)
quintopie
la source
1
Intéressant! C'est en effet possible.
Conor O'Brien
7
est-ce que je peux expliquer leik wat chaque char duz
Seadrus
3
Il convient de noter que cela utilise le quining intégré Qqui pousse le code source du programme.
Martin Ender
(Et a en outre noté que la longueur totale serait quelque part dans le voisinage de 150 octets de plus sans ladite fonction intégrée.)
Quintopia
Les fonctions de quining intégrées sont autorisées pour ce défi.
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);

J'ai mal compris les règles plus tôt, donc ma réponse précédente était incorrecte.

Celui-ci utilise le levage de fonction au lieu du levage variable, il ne dépend donc pas du programme 10. En fait, je pense que c'est une quine pour toute combinaison de deux programmes concaténés ou plus.

Avertissement: il est vraiment tard en ce moment, donc tout ce qui précède pourrait être complètement faux.

grc
la source
Je ne pense pas que vous ayez besoin alertde la sortie de fonction.
Mama Fun Roll
Oh je vois, peu importe.
Mama Fun Roll
Vous pouvez supprimer les points-virgules de fin, ce qui vous fait économiser 20 octets. (Assurez-vous également de mettre à jour la chaîne de modèle à l'intérieur.)
Mama Fun Roll
1
@ ՊՓԼՃՐՊՃՈԲՍԼ Je pense que les points-virgules sont nécessaires pour la concaténation, car je n'inclus pas réellement les retours à la ligne.
grc
Encore une fois, alors.
Mama Fun Roll
9

Javascript ES6, 1935 octets

Dix programmes:

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
la source
4
C'est beau à regarder.
Conor O'Brien
4
Tous ces points-virgules supplémentaires juste pour s'assurer que le programme 2 est plus long que le programme 1 ...
SuperJedi224
Pourriez-vous peut-être utiliser l'expression régulière (\S)+et la substitution $0$1pour enregistrer certains octets?
Martin Ender
@ MartinBüttner Probablement, je vais essayer cet après
SuperJedi224
2

𝔼𝕊𝕄𝕚𝕟 2, 214 caractères / 334 octets

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

Try it here (Firefox only).

Explication

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

Le programme compte les recherches de 9 espaces consécutifs, ce qui correspond au nombre d'espaces de tête dans le 10e programme. S'il trouve une correspondance, le code source est sorti; sinon, le code source, dirigé par un espace, est sorti.

Mama Fun Roll
la source
Quel encodage utilisez-vous? Semble être de 284 octets sur le codage ISO 8859-1. Testé ici
Downgoat
J'utilise UTF-8.
Mama Fun Roll
J'ai oublié qu'il s'agit d'ESmin 2, j'ai donc lu le nombre de caractères comme "2 214 caractères": P
Conor O'Brien