Wachsende Quine-Sequenz

18

Sie müssen eine Folge von 10 Programmen schreiben p1 p2 ... p10, die die folgenden Eigenschaften erfüllen:

  • pKdruckt pK+1für K1 bis 9
  • p10 druckt p10
  • Wenn die ersten KProgramme verkettet werden, wird das resultierende Programm p1...pKgedruckt p1...pK.
  • Jedes Programm pKmuss größer als das vorherige sein pK-1.
  • Alle Programme müssen in derselben Sprache sein.
  • Eingebaute Quining-Funktionen (zB Qin vielen Sprachen) sind erlaubt.

Ihre Punktzahl ist die Summe der Bytezahlen der 10 Programme. Da es nur zehn Programme gibt, müssen Sie Ihre Codes so kurz wie möglich halten. Viel Glück.

Conor O'Brien
quelle
"Jedes Programm pK muss größer als das vorherige Programm pK-1 sein" - huh, warum diese seltsame Anforderung?
nicael
6
@nicael Weil es eine wachsende Quine-Sequenz ist.
Conor O'Brien
Warum druckt sich p10 selbst und nicht p11? Das macht das Problem ein bisschen schwieriger.
SuperJedi224
@ SuperJedi224 Da gibt es einfach keinen p11.
Conor O'Brien
Diese Herausforderung wäre viel interessanter gewesen, wenn eingebaute Quining-Funktionen verboten worden wären.
Dennis

Antworten:

15

Im Ernst, 245 Bytes:

Alle zehn Programme verkettet:

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.









Es gibt unsichtbare Zeichen, die beim Ausführen sichtbar werden, eine seltsame Eigenschaft von Byte 7F. Die nachgestellten Zeilenumbrüche in jedem Programm sind erheblich. Tatsächlich hängt Seriously automatisch Zeilenumbrüche an die Ausgabe an, unabhängig davon, ob Sie dies möchten oder nicht. Dies zählt nur die Anzahl der Zeilenumbrüche in der Ausgabe und sobald diese Zahl 8 überschreitet, wird das letzte Zeichen der Ausgabe gelöscht. Als solches p1..pKwird p1..pKfür alle K> 4 gedruckt .

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
quelle
1
Interessant! Es ist in der Tat möglich.
Conor O'Brien
7
Kann ich eine Erklärung leik wat jeder char duz
Seadrus
3
Es sollte beachtet werden, dass dies das eingebaute Quining verwendet, das Qden Quellcode des Programms überträgt .
Martin Ender
(Und weiter bemerkt, dass die Gesamtlänge irgendwo in der Nähe von 150 Bytes länger wäre, ohne das
Eingebaute
Eingebaute Quining-Funktionen sind für diese Herausforderung zulässig.
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);

Ich habe die Regeln früher falsch verstanden, daher war meine vorherige Antwort falsch.

In diesem Fall wird das Funktion-Heben anstelle des variablen Hebens verwendet, sodass es nicht von Programm 10 abhängt. Ich denke, es ist eine Quine für jede Kombination von zwei oder mehr verketteten Programmen.

Haftungsausschluss: Im Moment ist es sehr spät, daher kann alles völlig falsch sein.

grc
quelle
Ich glaube nicht, dass Sie alertwegen der Funktionsausgabe brauchen .
Mama Fun Roll
Oh ich verstehe, vergiss es.
Mama Fun Roll
Sie können abschließende Semikolons entfernen und so 20 Byte sparen. (Stellen Sie sicher, dass Sie auch die Vorlagenzeichenfolge im Inneren aktualisieren.)
Mama Fun Roll
1
@ ՊՓԼՃՐՊՃՈԲՍԼ Ich denke, die Semikolons werden für die Verkettung benötigt, da ich die Zeilenumbrüche nicht mit einbeziehe.
Grc
Also, vergiss es wieder.
Mama Fun Roll
9

Javascript ES6, 1935 Bytes

Zehn Programme:

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
quelle
4
Das ist schön anzusehen.
Conor O'Brien
4
Alle diese zusätzlichen Semikolons, nur um sicherzustellen, dass Programm 2 länger als Programm 1 ist ...
SuperJedi224
Könnten Sie vielleicht den regulären Ausdruck (\S)+und die Ersetzung verwenden $0$1, um einige Bytes zu sparen?
Martin Ender
@ MartinBüttner Wahrscheinlich werde ich es heute Nachmittag versuchen
SuperJedi224
2

𝔼𝕊𝕄𝕚𝕟 2, 214 Zeichen / 334 Bytes

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

Try it here (Firefox only).

Erläuterung

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

Das Programm zählt die Suche nach 9 Leerzeichen in einer Reihe, was der Anzahl der führenden Leerzeichen im 10. Programm entspricht. Wenn es eine Übereinstimmung findet, wird der Quellcode ausgegeben; Andernfalls wird der durch ein Leerzeichen angeführte Quellcode ausgegeben.

Mama Fun Roll
quelle
Welche Codierung verwenden Sie? Scheint 284 Bytes bei der ISO 8859-1-Codierung zu sein. Getestet hier
Downgoat
Ich benutze UTF-8.
Mama Fun Roll
Ich habe vergessen, dass es ESmin 2 ist, also habe ich die Zeichenanzahl als "2.214 Zeichen" gelesen: P
Conor O'Brien