Rolling Quine Dice


19

สร้างโปรแกรมที่ให้ผลลัพธ์เอง

อย่างไรก็ตามหากซอร์สโค้ดซ้ำ n ครั้ง(หมายถึงการเชื่อมต่อสำเนาของซอร์สโค้ดกับจุดสิ้นสุด n-1 ครั้ง)ดังนั้นจึงควรมีความน่าจะเป็น 1 / n ในการแสดงผลซอร์สโค้ดต้นฉบับความน่าจะเป็น 1 / n ของเอาต์พุต ซอร์สโค้ดซ้ำสองครั้งความน่าจะเป็น 1 / n ของการส่งออกซอร์สโค้ดซ้ำสามครั้ง ... และความน่าจะเป็น 1 / n ในการส่งออกซอร์สโค้ด n ครั้ง

ตัวอย่างเช่นถ้าโปรแกรมของคุณแล้วมันควรเอาท์พุทว่าfoobar foobarแต่ถ้าคุณทำงานfoobarfoobarfoobarfoobarแล้วควรจะมีโอกาส¼แต่ละ outputting foobar, foobarfoobar, และfoobarfoobarfoobarfoobarfoobarfoobarfoobar

  • การกระจายของแต่ละเอาต์พุตที่เป็นไปได้ควรเท่ากัน
  • นอกเหนือจากวิธีการใช้ I / O มาตรฐานและช่องโหว่มาตรฐานห้ามใช้กฎควินินมาตรฐาน (ไม่สามารถเข้าถึงแหล่งที่มาของมันเอง ฯลฯ )
  • นี่คือรหัสกอล์ฟเพื่อให้ได้คำตอบที่สั้นที่สุดในหน่วยไบต์

การสุ่มหลอกนั้นดีพอหรือไม่?
สูญเปล่า

1
@wastl ใช่แล้วไม่เป็นไร
JMigst

2
คำจำกัดความของคุณปิดอยู่เล็กน้อย ถ้าคุณทำซ้ำ 1 ครั้ง (เช่นfoobarfoobar) มันก็แค่พิมพ์foobar
Veskah

1
@Veskah foobarfoobarเป็นfoobarซ้ำสองครั้งไม่ได้ครั้งเดียว
Nit

@Nit คุณเริ่มต้นด้วยแหล่งที่มา หากคุณใช้อีกครั้งคุณจะทำซ้ำเพียงครั้งเดียว แต่มีสองอินสแตนซ์
Veskah

คำตอบ:



9

เยลลี่ , 24 22 ไบต์

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

ลองออนไลน์!

ลอง 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.

5

05AB1E , 32 ไบต์

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

ลองออนไลน์!

คำอธิบาย

"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

คุณสามารถเพิ่มคำอธิบายเมื่อคุณมีโอกาสได้หรือไม่?
Shaggy

@Shaggy: ขอบคุณสำหรับการเตือนฉัน :)
Emigna

2

Gol> <> , 21 ไบต์

:QoaonC|P\Sx*F2ssS"
0

ลองออนไลน์!

คำอธิบาย:

: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

1

อลิซ 35 ไบต์

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

ลองออนไลน์!

คำอธิบาย

"

เช่นเดียวกับหลาย ๆ quines ในภาษา 2D สิ่งนี้เริ่มต้นด้วยการ"ล้อมรอบตัวมันเองและดันทั้งบรรทัดแรกยกเว้น"ตัวของมันเอง

d3a*h-&;

การเพิ่มซอร์สโค้ดเพิ่มเติมหนึ่งชุดขึ้นไปจะวางช่องว่างบางส่วนไว้ที่ท้ายสตริงตัวอักษร เพื่อให้เป็นจริง quine เราตัดทอนกองที่ 31 ตัวอักษร

addd

ดันขึ้นบรรทัดใหม่จากนั้นความสูงของสแต็กสามครั้ง ค่าที่ถูกผลักเนื่องจากความสูงของสแต็กคือ 32 (ช่องว่างในบรรทัดที่สอง), 33 ( !ในบรรทัดที่สอง) และ 34 (เริ่มต้น")

d

ดันความสูงสแต็กอีกครั้งคราวนี้เป็นความยาวของซอร์สโค้ดต้นฉบับ (35)

1

เริ่มต้นตัวนับที่ 1 ซึ่งจะนับจำนวนครั้งที่ซอร์สโค้ดถูกทำซ้ำ

2h&}

เลี้ยวขวาสามครั้งในสถานที่ (เช่นเลี้ยวซ้าย) การทำซ้ำซอร์สโค้ดเพิ่มเติมแต่ละรายการจะมีส่วนร่วมhในคอลัมน์เดียวกันเช่นนี้}ซึ่งจะเป็นการเพิ่มตัวนับ เมื่อ IP กลับไปที่}ให้เลี้ยวขวาอีกครั้งเพื่อดำเนินการต่อในทิศทางเดียวกัน

Uh

ใช้ตัวเลขสุ่มที่สม่ำเสมอจาก 0 ถึง n-1 จากนั้นเพิ่ม 1 เพื่อรับจำนวนครั้งในการส่งออกต้นฉบับ

*t&w

ทวีคูณด้วยความสูงสแต็กก่อนหน้านี้ (ความยาวรหัส) จากนั้นทำซ้ำต่อไปนี้หลายครั้งโดยการผลักที่อยู่ผู้ส่งที่หลายครั้งลบหนึ่ง

.o

เอาต์พุตด้านบนของสแต็กโดยไม่ทำลาย

dt,

ย้ายรายการสแต็กด้านล่างไปด้านบน

k@

ทำซ้ำจากนั้นยกเลิกหลังจากวนซ้ำ



1

ถ่าน 58 ไบต์

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

ลองออนไลน์! ไม่มี verbose รุ่นเพราะ deverbosifier "´"ปัจจุบันฉายาบน ส่วนใหญ่ขึ้นอยู่กับ Charcoal Quine จากGolf คุณเป็น Quine ที่ดีมาก! . คำอธิบาย:

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

กำหนดสตริงตัวอักษรที่จะθ⎚×⊕‽L⊞Oυω⁺⪫⁺´≔θ´´θθ

ล้างเอาต์พุตก่อนหน้าใด ๆ เพื่อให้เฉพาะเอาต์พุตล่าสุดเท่านั้นที่มีผล

×⊕‽L⊞Oυω

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

⁺⪫⁺´≔θ´´θ

ย่อหน้าสายอักขระตัวอักษรไปθแล้วแทรกตัวอักษร´s θระหว่างตัวละครแต่ละตัวแล้วต่อท้ายสำเนาของผู้อื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.