Rolling Quine Dice

19

Buat program yang menghasilkan sendiri.

Namun, jika kode sumber diulang n kali (artinya menyatukan salinan kode sumber hingga akhir n-1 kali) , maka harus ada 1 / n probabilitas mengeluarkan kode sumber asli, probabilitas 1 / n probabilitas menghasilkan kode sumber diulang dua kali, probabilitas 1 / n untuk menghasilkan kode sumber diulang tiga kali, ..., dan probabilitas 1 / n untuk mengeluarkan kode sumber n kali.

Misalnya, jika program Anda foobar, maka itu harus selalu tepat foobar. Namun, jika Anda menjalankan foobarfoobarfoobarfoobar, maka harus ada ¼ kesempatan masing-masing keluaran foobar, foobarfoobar, foobarfoobarfoobardan foobarfoobarfoobarfoobar.

  • Distribusi setiap output yang mungkin harus sama
  • Selain menerapkan metode I / O standar dan lubang standar terlarang, aturan quine standar berlaku (tidak dapat mengakses sumbernya sendiri, dll.)
  • Ini kode golf sehingga jawaban terpendek dalam byte menang
JMigst
sumber
Apakah pseudorandom cukup baik?
wastl
1
@wastl Yap, tidak apa-apa
JMigst
2
Definisi Anda sedikit salah. Jika Anda mengulanginya 1 kali (yaitu foobarfoobar) maka itu hanya akan mencetakfoobar
Veskah
1
@Veskah foobarfoobarini foobardiulang dua kali, tidak sekali.
Nit
@Nit Anda mulai dengan sumbernya. Jika Anda menggunakannya lagi, Anda hanya mengulanginya sekali tetapi memiliki dua contoh.
Veskah

Jawaban:

9

Jelly , 24 22 byte

“Ṿ;ẋŻɼLX¤¤µ”Ṿ;ẋŻɼLX¤¤µ

Cobalah online!

Cobalah x4!

“Ṿ;ẋŻɼLX¤¤µ”Ṿ;ẋŻɼLX¤¤µ
“Ṿ;ẋŻɼLX¤¤µ”              String literal: Ṿ;ẋŻɼLX¤¤µ
            Ṿ             Uneval. Return “Ṿ;ẋŻɼLX¤¤µ” (with quotes)
             ;            Append the initial string. Yields the source code. 
                ɼ         Apply the preceding link to the register and store the 
                          result in the register.
               Ż          Prepend 0. 
                          Each time Żɼ is used when the source code is repeated
                          the register's length increases by one. 
                          We can't use ‘ because it closes string literals.
                 L        Length. Returns the number of times the source code has
                          been repeated up till now.
                  X       Random element. If ɼ results in n, X returns a random 
                          integer between 1 and n.
                   ¤      Combines ŻɼLX as a nilad. 
              ẋ           Repeat the source code a random number of times between
                          1 and n.
                    ¤     Close everything from the initial string literal as a
                          nilad. 
                     µ    Start a new monadic chain. The register gets updated
                          once for time the code is repeated but only the final
                          repetition will result in output.
dylnan
sumber
5

05AB1E , 32 byte

"34çìDJ¼32ôн¾L×Ω"34çìDJ¼32ôн¾L×Ω

Cobalah online!

Penjelasan

"34çìDJ¼32ôн¾L×Ω"                   # push this string
                 34ç                # push a "-character
                    ì               # prepend it to the string
                     DJ             # duplicate and join the copy to the string
                       ¼            # increment the counter
                        32ô         # split the string into pieces of size 32
                           н        # take the first one
                            ¾L×     # repeat it for each in [1 ... counter]
                               Ω    # pick one at random
Emigna
sumber
Bisakah Anda menambahkan penjelasan saat ada kesempatan?
Shaggy
@Shaggy: Terima kasih sudah mengingatkan saya :)
Emigna
2

Gol> <> , 21 byte

:QoaonC|P\Sx*F2ssS"
0

Cobalah online!

Penjelasan:

:Q     |     If the top of stack is 0, skip to next |
             Top of stack is implicitly 0
        P    Increment top of stack
         \   Redirect pointer down]
0:QoaonC|P\Sx*F2ssS"  Increment for each copy of the source code
0:QoaonC|P\Sx*F2ssS"


         \   Redirect back to the right
          Sx*  Multiply the number of copies of the source code by a random number between 0 and 1
             F      Repeat that many times
              2ss   Push a double quote
                 S" Print the source code minus the quote, newline and 0
 :Q       If top of stack is not 0
   oaonC  Print the quote, a newline and a 0 to complete the source code and continue the loop
        \Sx*   Error on the * for some reason
Jo King
sumber
1

Alice , 35 byte

"d3a*h-&;adddd12h&}Uh*t&w.odt,k@
 !

Cobalah online!

Penjelasan

"

Seperti banyak quine dalam bahasa 2D, ini dimulai dengan "yang membungkus dirinya sendiri dan mendorong seluruh baris pertama kecuali "dirinya sendiri.

d3a*h-&;

Menambahkan satu atau lebih salinan tambahan dari kode sumber akan menempatkan beberapa ruang implisit di akhir literal string. Untuk menjadikannya quine, kami memotong 31 karakter.

addd

Dorong baris baru, lalu tinggi tumpukan tiga kali. Nilai yang didorong sebagai ketinggian tumpukan adalah 32 (spasi di baris kedua), 33 ( !di baris kedua), dan 34 (awal ").

d

Dorong tinggi tumpukan lagi, kali ini sebagai panjang kode sumber asli (35).

1

Inisialisasi penghitung di 1. Ini akan menghitung berapa kali kode sumber diulang.

2h&}

Belok kanan tiga kali pada tempatnya (yaitu, belok kiri). Setiap pengulangan tambahan dari kode sumber akan berkontribusi hdalam kolom yang sama dengan ini }, sehingga menambah penghitung. Ketika IP kembali ke }, belok kanan lagi untuk melanjutkan ke arah yang sama.

Uh

Ambil angka acak seragam dari 0 hingga n-1, lalu tambahkan 1 untuk mendapatkan berapa kali untuk mengeluarkan sumber aslinya.

*t&w

Kalikan dengan tinggi tumpukan yang didorong sebelumnya (panjang kode), lalu ulangi yang berikut berulang kali dengan mendorong alamat pengirim yang berkali-kali minus satu.

.o

Keluarkan bagian atas tumpukan tanpa merusaknya.

dt,

Pindahkan entri tumpukan bawah ke atas.

k@

Ulangi, lalu akhiri setelah loop selesai.

Nitrodon
sumber
1

JavaScript (Node.js) , 62 byte

(f=a=>b=>b?f(a+.5):`(f=${f})(1)`.repeat(1+Math.random()*a))(1)

Cobalah online!

l4m2
sumber
1
Entah saya sangat sial, atau ini tidak dapat mencetak lebih dari dua salinan kode sumber asli.
Nitrodon
@Nitrodon Terima kasih, sudah diperbaiki
l4m2
1

Arang , 58 byte

≔´θ´⎚´×´⊕´‽´L´⊞´O´υ´ω´⁺´⪫´⁺´´´≔´θ´´´´´θθ⎚×⊕‽L⊞Oυω⁺⪫⁺´≔θ´´θ

Cobalah online! Tidak ada versi verbose karena deverbosifier saat ini tersedak "´". Sebagian besar didasarkan pada arang quine dari Golf Anda quine untuk kebaikan! . Penjelasan:

≔´θ´⎚´×´⊕´‽´L´⊞´O´υ´ω´⁺´⪫´⁺´´´≔´θ´´´´´θθ

Tetapkan string literal θ⎚×⊕‽L⊞Oυω⁺⪫⁺´≔θ´´θke θ.

Bersihkan output sebelumnya, sehingga hanya output terakhir yang berlaku.

×⊕‽L⊞Oυω

Dorong string kosong ke array yang telah ditentukan. Ini membuat panjang array sama dengan jumlah pengulangan yang diproses sejauh ini, jadi ambil panjangnya, ambil nomor acak rentang eksklusif implisit, tambahkan 1, dan ulangi string berikut berkali-kali.

⁺⪫⁺´≔θ´´θ

Tambahkan string literal ke θ, lalu masukkan literal ´s antara masing-masing karakter, lalu sufiks salinan lain dari θ.

Neil
sumber