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.


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

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.


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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.