Котячі кубикові кістки


19

Створіть програму, яка виводить себе.

Однак якщо вихідний код повторюється n разів (мається на увазі об'єднати копію вихідного коду до кінця n-1 рази) , тоді повинна бути 1 / n ймовірність виведення вихідного вихідного коду, 1 / n ймовірність виведення вихідний код повторюється двічі, 1 / n ймовірність виведення вихідного коду повторюється три рази, ... і 1 / n ймовірність виведення вихідного коду n разів.

Наприклад, якщо ваша програма є foobar, то вона завжди повинна виходити точно foobar. Тим НЕ менше, якщо ви біжите foobarfoobarfoobarfoobar, то повинна бути ¼ ймовірністю кожна з виведення foobar, foobarfoobar, foobarfoobarfoobarі foobarfoobarfoobarfoobar.

  • Розподіл кожного можливого виходу повинен бути рівним
  • На додаток до стандартних методів вводу / виводу, застосовуючи стандартні лазівки, забороняються, застосовуються стандартні правила квин (не може отримати доступ до власного джерела тощо)
  • Це кодовий гольф, тому найкоротша відповідь у байтах виграє

Чи досить псевдовипадковий?
wastl

1
@wastl Так, це добре
JMigst

2
Ваше визначення трохи відключене. Якщо ви повторите це 1 раз (тобто foobarfoobar), то він би надрукував лишеfoobar
Веска

1
@Veskah foobarfoobarце foobarповторюється два рази, а не один раз.
Ніт

@Nit Ви починаєте з джерела. Якщо ви використовуєте його знову, ви повторили лише один раз, але маєте два екземпляри.
Веська

Відповіді:



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: Дякую, що нагадали мені :)
Emigna

2

Гол> <> , 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-&;

Додавання однієї або декількох додаткових копій вихідного коду розмістить кілька неявних пробілів у кінці рядкового літералу. Щоб зробити це насправді квинею, ми усікаємо стек у 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υω⁺⪫⁺´≔θ´´θ

Спробуйте в Інтернеті! Немає багатослівної версії, оскільки девербосифікатор зараз задихається "´". В основному на основі лайки з деревним вугіллям від Гольфу, ви є великою ціною! . Пояснення:

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

Призначають символьного рядка θ⎚×⊕‽L⊞Oυω⁺⪫⁺´≔θ´´θв θ.

Очистіть будь-який попередній вихід, щоб набув чинності лише останній вихід.

×⊕‽L⊞Oυω

Натисніть на порожній рядок до попередньо визначеного масиву. Це робить довжину масиву рівною кількості повторень, оброблених дотепер, тому візьміть його довжину, візьміть випадкове число неявного виключного діапазону, додайте 1 та повторіть наступний рядок багато разів.

⁺⪫⁺´≔θ´´θ

Додайте буквальний рядок до цього θ, а потім вставіть літеральний ´s між кожним символом, а потім суфіксом іншої копії θ.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.