Urutan Kueri Tumbuh

18

Anda harus menulis urutan 10 program p1 p2 ... p10yang memenuhi properti berikut:

  • pKcetakan pK+1untuk Kdari 1 sampai 9
  • p10 cetakan p10
  • Ketika Kprogram pertama digabungkan, program yang dihasilkan p1...pKdicetak p1...pK.
  • Setiap program pKharus lebih besar dalam ukuran byte dari program sebelumnya pK-1.
  • Semua program harus dalam bahasa yang sama.
  • Fungsi quining bawaan (misalnya Qdalam banyak bahasa) diizinkan.

Skor Anda adalah jumlah jumlah byte dari 10 program. Karena hanya ada sepuluh program, Anda harus membuat kode sesingkat mungkin. Semoga berhasil.

Conor O'Brien
sumber
"Setiap program pK harus lebih besar dalam ukuran byte dari program sebelumnya pK-1" - huh, mengapa persyaratan aneh ini?
nicael
6
@nicael Karena ini adalah urutan quine yang sedang tumbuh .
Conor O'Brien
Mengapa p10 mencetak sendiri dan bukan p11? Itu membuat masalahnya sedikit lebih sulit.
SuperJedi224
@ SuperJedi224 Karena tidak ada p11.
Conor O'Brien
Tantangan ini akan jauh lebih menarik jika fungsi quining bawaan dilarang.
Dennis

Jawaban:

15

Serius, 245 byte:

Semua sepuluh program digabungkan:

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.









Ada karakter yang tidak terlihat yang menjadi terlihat ketika dieksekusi, properti aneh byte 7F. Jejak baris baru pada setiap program adalah signifikan. Bahkan, Serius secara otomatis menambahkan baris baru ke outputnya apakah Anda menginginkannya atau tidak. Ini hanya menghitung jumlah baris baru dalam output, dan segera setelah angka tersebut melebihi 8, itu akan menghapus karakter terakhir dari output. Dengan demikian, p1..pKakan mencetak p1..pKuntuk semua 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.)
kuintopia
sumber
1
Menarik! Itu memang mungkin.
Conor O'Brien
7
bisakah saya menjelaskan leik wat char char masing-masing
Seadrus
3
Perlu dicatat bahwa ini menggunakan quining built-in Qyang mendorong kode sumber program.
Martin Ender
(Dan selanjutnya dicatat bahwa total panjang akan berada di suatu tempat di sekitar 150 byte lebih lama tanpa kata built-in.)
quintopia
Fungsi quining bawaan diizinkan untuk tantangan ini.
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);

Saya salah paham aturan sebelumnya, jadi jawaban saya sebelumnya salah.

Yang ini menggunakan fungsi mengangkat bukan mengangkat variabel, jadi itu tidak tergantung pada program 10. Bahkan, saya pikir itu adalah quine untuk kombinasi dua atau lebih program gabungan.

Penafian: saat ini benar-benar terlambat, jadi semua hal di atas bisa sepenuhnya salah.

grc
sumber
Saya tidak berpikir Anda perlu alertkarena fungsi keluaran.
Mama Fun Roll
Oh, begitu.
Mama Fun Roll
Anda dapat menghilangkan titik koma, menghemat 20 byte. (Pastikan juga untuk memperbarui string templat di dalamnya.)
Mama Fun Roll
1
@ ՊՓԼՃՐՊՃՈԲՍԼ Saya pikir titik koma diperlukan untuk penggabungan, karena saya sebenarnya tidak termasuk baris baru.
grc
Nevermind lagi, kalau begitu.
Mama Fun Roll
9

Javascript ES6, 1935 byte

Sepuluh program:

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
sumber
4
Ini indah untuk dilihat.
Conor O'Brien
4
Semua titik koma ekstra itu hanya untuk memastikan bahwa program 2 lebih panjang dari program 1 ...
SuperJedi224
Bisakah Anda menggunakan regex (\S)+dan substitusi $0$1untuk menghemat beberapa byte?
Martin Ender
@ MartinBüttner Mungkin, saya akan mencoba sore ini
SuperJedi224
2

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

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

Try it here (Firefox only).

Penjelasan

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

Program menghitung pencarian untuk 9 spasi berturut-turut, yang merupakan jumlah spasi utama dalam program ke-10. Jika menemukan kecocokan, maka kode sumber dikeluarkan; jika tidak, kode sumber, dipimpin oleh spasi, dikeluarkan.

Mama Fun Roll
sumber
Pengodean apa yang Anda gunakan? Tampaknya menjadi 284 byte pada pengkodean ISO 8859-1. Diuji di sini
Downgoat
Saya menggunakan UTF-8.
Mama Fun Roll
Saya lupa bahwa itu ESmin 2, jadi saya membaca hitungan char sebagai "2.214 karakter": P
Conor O'Brien