ลำดับ Quine ที่กำลังเติบโต


18

คุณจะต้องเขียนโปรแกรม 10 โปรแกรมp1 p2 ... p10ตามคุณสมบัติต่อไปนี้:

  • pKพิมพ์pK+1สำหรับK1-9
  • p10 พิมพ์ p10
  • เมื่อต่อKโปรแกรมแรกเข้าด้วยกันโปรแกรมที่เป็นผลลัพธ์จะp1...pKพิมพ์p1...pKออกมา
  • แต่ละโปรแกรมจะต้องมีขนาดใหญ่ในขนาดไบต์กว่าโครงการก่อนหน้านี้pKpK-1
  • โปรแกรมทั้งหมดจะต้องเป็นภาษาเดียวกัน
  • ฟังก์ชั่นควินนิ่งในตัว (เช่นQในหลายภาษา) ได้รับอนุญาต

คะแนนของคุณคือผลรวมของจำนวนไบต์ของ 10 โปรแกรม เนื่องจากมีเพียงสิบโปรแกรมคุณต้องทำให้รหัสของคุณสั้นที่สุด โชคดี.


"แต่ละโปรแกรม pK ต้องมีขนาดใหญ่กว่าโปรแกรมก่อนหน้า pK-1" - huh ทำไมความต้องการแปลก ๆ นี้?
nicael

6
@nicael เพราะมันเป็นลำดับquine ที่กำลังเติบโต
Conor O'Brien

เหตุใด p10 จึงพิมพ์ตัวเองและไม่ใช่ p11 นั่นทำให้ปัญหาหนักขึ้น
SuperJedi224

@ SuperJedi224 เพราะไม่มี p11
Conor O'Brien

ความท้าทายนี้จะน่าสนใจมากขึ้นถ้าฟังก์ชั่นควินนิ่งในตัวถูกห้าม
Dennis

คำตอบ:


15

อย่างจริงจัง 245 ไบต์:

โปรแกรมทั้งสิบตัวต่อกัน:

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.









มีตัวละครที่มองไม่เห็นที่มองเห็นได้เมื่อเรียกใช้งานซึ่งเป็นคุณสมบัติที่แปลกของไบต์ 7F การขึ้นบรรทัดใหม่ของแต่ละโปรแกรมมีความสำคัญ ในความเป็นจริงอย่างจริงจังโดยอัตโนมัติผนวกบรรทัดใหม่เพื่อเอาท์พุทไม่ว่าคุณต้องการหรือไม่ สิ่งนี้จะนับจำนวนบรรทัดใหม่ในเอาต์พุตและทันทีที่จำนวนนั้นเกิน 8 มันจะลบอักขระตัวสุดท้ายของเอาต์พุต เช่นนี้p1..pKจะพิมพ์p1..pKสำหรับ 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
! ที่น่าสนใจ เป็นไปได้แน่นอน
Conor O'Brien

7
ฉันสามารถอธิบายได้อย่างชัดเจนว่าแต่ละคนมีค่า
Seadrus

3
ควรสังเกตว่าสิ่งนี้ใช้ quining ในตัวQซึ่งจะผลักดันซอร์สโค้ดของโปรแกรม
Martin Ender

(และตั้งข้อสังเกตต่อไปว่าความยาวทั้งหมดจะเป็นหนึ่งในบริเวณใกล้เคียง 150 ไบต์นานโดยไม่กล่าวว่าในตัว.)
quintopia

ฟังก์ชัน quining ในตัวได้รับอนุญาตสำหรับความท้าทายนี้
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);

ฉันเข้าใจผิดกฎก่อนหน้านี้ดังนั้นคำตอบก่อนหน้าของฉันจึงไม่ถูกต้อง

อันนี้ใช้ฟังก์ชั่นการยกฟังก์ชั่นแทนการยกตัวแปรดังนั้นมันไม่ได้ขึ้นอยู่กับโปรแกรม 10 ที่จริงแล้วฉันคิดว่ามันเป็นคำตอบสำหรับการรวมกันของสองโปรแกรมเข้าด้วยกัน

ข้อจำกัดความรับผิดชอบ: ตอนนี้มันช้าไปแล้วดังนั้นทุกอย่างที่กล่าวมาอาจผิดอย่างสมบูรณ์


ฉันไม่คิดว่าคุณต้องการalertเพราะฟังก์ชั่นเอาท์พุท
Mama Fun Roll

โอ้ฉันเข้าใจแล้วไม่เป็นไร
Mama Fun Roll

คุณสามารถใช้เครื่องหมายอัฒภาคต่อท้ายประหยัด 20 ไบต์ (ตรวจสอบให้แน่ใจว่าได้อัปเดตสตริงเทมเพลตด้วยเช่นกัน)
Mama Fun Roll

1
@ think ฉันคิดว่าจำเป็นต้องใช้เครื่องหมายอัฒภาคเพื่อต่อกันเนื่องจากฉันไม่ได้รวมบรรทัดใหม่
grc

ไม่เป็นไรอีกแล้ว
Mama Fun Roll

9

Javascript ES6, 1935 ไบต์

สิบโปรแกรม:

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
นี่คือรูปลักษณ์ที่สวยงาม
Conor O'Brien

4
เซมิโคลอนพิเศษทั้งหมดนั้นเพื่อให้แน่ใจว่าโปรแกรม 2 ยาวกว่าโปรแกรม 1 ...
SuperJedi224

คุณสามารถใช้ regex (\S)+และการทดแทน$0$1เพื่อบันทึกไบต์ได้ไหม?
Martin Ender

@ MartinBüttnerอาจจะลองบ่ายวันนี้
SuperJedi224

2

ch 2, 214 ตัวอักษร / 334 ไบต์

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

Try it here (Firefox only).

คำอธิบาย

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

โปรแกรมนับการค้นหาช่องว่าง 9 ช่องในหนึ่งแถวซึ่งเป็นจำนวนช่องว่างนำหน้าในโปรแกรมที่ 10 หากพบการจับคู่แล้วรหัสแหล่งที่มาจะถูกส่งออก; มิฉะนั้นรหัสแหล่งที่มานำไปสู่ช่องว่างจะถูกส่งออก


คุณใช้การเข้ารหัสแบบใด น่าจะเป็น 284 ไบต์ในการเข้ารหัส ISO 8859-1 ทดสอบที่นี่
Downgoat

ฉันใช้ UTF-8
Mama Fun Roll

ฉันลืมว่ามันคือ ESmin 2 ดังนั้นฉันจึงอ่านจำนวนถ่านเป็น "2,214 ตัวอักษร": P
Conor O'Brien
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.