Xúc xắc lăn


19

Tạo một chương trình đầu ra chính nó.

Tuy nhiên, nếu mã nguồn được lặp lại n lần (nghĩa là ghép một bản sao của mã nguồn vào cuối n-1 lần) , thì sẽ có xác suất 1 / n xuất ra mã nguồn gốc, xác suất xuất ra 1 / n mã nguồn được lặp lại hai lần, xác suất 1 / n xuất ra mã nguồn được lặp lại ba lần, ... và xác suất 1 / n xuất ra mã nguồn n lần.

Ví dụ, nếu chương trình của bạn là foobar, thì nó sẽ luôn xuất ra chính xác foobar. Tuy nhiên, nếu bạn chạy foobarfoobarfoobarfoobar, sau đó có phải là một cơ hội ¼ từng xuất ra foobar, foobarfoobar, foobarfoobarfoobarfoobarfoobarfoobarfoobar.

  • Phân phối của mỗi đầu ra có thể nên bằng nhau
  • Ngoài các phương pháp I / O tiêu chuẩn áp dụng và các lỗ hổng tiêu chuẩn bị cấm, các quy tắc chuẩn mực được áp dụng (không thể truy cập vào nguồn của chính nó, v.v.)
  • Đây là mã golf nên câu trả lời ngắn nhất trong byte thắng

Là giả đủ tốt?
lãng phí

1
@wastl Yep, không sao đâu
JMigst

2
Định nghĩa của bạn là hơi tắt. Nếu bạn lặp lại 1 lần (tức là foobarfoobar) thì nó sẽ chỉ infoobar
Veskah

1
@Veskah foobarfoobarđược foobarlặp lại hai lần, không phải một lần.
Nit

@Nit Bạn bắt đầu với nguồn. Nếu bạn sử dụng lại, bạn chỉ lặp lại một lần nhưng có hai trường hợp.
Veskah

Câu trả lời:



9

Thạch , 24 22 byte

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

Hãy thử trực tuyến!

Hãy thử nó 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 byte

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

Hãy thử trực tuyến!

Giải trình

"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

Bạn có thể thêm một lời giải thích khi bạn có cơ hội?
Xù xì

@Shaggy: Cảm ơn đã nhắc nhở tôi :)
Emigna

2

Gol> <> , 21 byte

:QoaonC|P\Sx*F2ssS"
0

Hãy thử trực tuyến!

Giải trình:

: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

Alice , 35 byte

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

Hãy thử trực tuyến!

Giải trình

"

Giống như trong nhiều câu hỏi trong các ngôn ngữ 2D, điều này bắt đầu bằng một chuỗi "bao quanh chính nó và đẩy toàn bộ dòng đầu tiên ngoại trừ "chính nó.

d3a*h-&;

Thêm một hoặc nhiều bản sao bổ sung của mã nguồn sẽ đặt một số khoảng trắng ẩn ở cuối chuỗi ký tự. Để thực hiện điều này thực sự là một câu đố, chúng tôi cắt ngắn ngăn xếp ở 31 ký tự.

addd

Đẩy một dòng mới, sau đó chiều cao ngăn xếp ba lần. Các giá trị được đẩy khi chiều cao ngăn xếp là 32 (khoảng trắng trong dòng thứ hai), 33 ( !trong dòng thứ hai) và 34 (ban đầu ").

d

Đẩy chiều cao ngăn xếp một lần nữa, lần này là chiều dài của mã nguồn ban đầu (35).

1

Khởi tạo bộ đếm ở 1. Điều này sẽ đếm số lần mã nguồn được lặp lại.

2h&}

Rẽ phải ba lần tại chỗ (nghĩa là rẽ trái). Mỗi lần lặp lại bổ sung của mã nguồn sẽ đóng góp hvào cùng một cột với điều này }, do đó làm tăng bộ đếm. Khi IP trở về }, quay lại lần nữa để tiếp tục theo cùng một hướng.

Uh

Lấy số ngẫu nhiên thống nhất từ ​​0 đến n-1, sau đó thêm 1 để lấy số lần xuất nguồn gốc.

*t&w

Nhân với chiều cao ngăn xếp được đẩy trước đó (chiều dài mã), sau đó lặp lại nhiều lần sau bằng cách đẩy một địa chỉ trả lại nhiều lần trừ đi một địa chỉ.

.o

Đầu ra của ngăn xếp mà không phá hủy nó.

dt,

Di chuyển mục ngăn xếp dưới cùng lên trên cùng.

k@

Lặp lại, sau đó chấm dứt sau khi vòng lặp kết thúc.



1

Than , 58 byte

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

Hãy thử trực tuyến! Không có phiên bản dài dòng vì hiện tại deverbosifier bị sặc "´". Chủ yếu dựa trên quine Char than từ Golf bạn một quine cho tốt! . Giải trình:

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

Gán chuỗi chữ θ⎚×⊕‽L⊞Oυω⁺⪫⁺´≔θ´´θđể θ.

Xóa mọi đầu ra trước đó, để chỉ đầu ra cuối cùng có hiệu lực.

×⊕‽L⊞Oυω

Đẩy chuỗi rỗng vào mảng được xác định trước. Điều này làm cho độ dài mảng bằng với số lần lặp lại được xử lý cho đến nay, vì vậy hãy lấy độ dài của nó, lấy một số ngẫu nhiên phạm vi độc quyền ẩn, thêm 1 và lặp lại chuỗi sau nhiều lần.

⁺⪫⁺´≔θ´´θ

Chuẩn bị chuỗi ký tự thành θ, sau đó chèn ´s bằng chữ giữa mỗi ký tự, sau đó thêm một bản sao khác θ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.