Rolling Quine Dice


19

Создайте программу, которая выводит себя сама.

Однако, если исходный код повторяется n раз (имеется в виду конкатенация копии исходного кода до конца n-1 раз) , то при исходном исходном коде должна быть вероятность 1 / n, вероятность вывода 1 / n исходный код повторяется дважды, вероятность 1 / n вывода исходного кода повторяется три раза, ... и вероятность 1 / n вывода исходного кода n раз.

Например, если ваша программа есть foobar, то она всегда должна выводить точно foobar. Тем не менее, если вы бежите foobarfoobarfoobarfoobar, то должна быть ¼ вероятностью каждая из вывода foobar, foobarfoobar, foobarfoobarfoobarи foobarfoobarfoobarfoobar.

  • Распределение каждого возможного выхода должно быть равным
  • Помимо применения стандартных методов ввода / вывода и запрещенных стандартных лазеек, применяются стандартные правила quine (невозможно получить доступ к собственному источнику и т. Д.)
  • Это код гольф, поэтому самый короткий ответ в байтах выигрывает

Достаточно ли хорош псевдослучайный?
Wastl

1
@wastl Да, все в порядке
JMigst

2
Ваше определение немного не соответствует. Если вы повторите это 1 раз (то есть foobarfoobar), тогда это будет только печататьfoobar
Веска

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

@Nit Вы начинаете с источника. Если вы используете его снова, вы повторили его только один раз, но у вас есть два экземпляра.
Веска

Ответы:



9

Желе , 24 22 байта

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

Попробуйте онлайн!

Попробуй это х4!

“Ṿ;ẋŻɼ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: Спасибо, что напомнили мне :)
Эминья,

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-&;

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

Попробуйте онлайн! Нет подробной версии, потому что в настоящее время дербосификатор задыхается "´". Главным образом на основе Quine из древесного угля от Golf, вы очень хороший! , Объяснение:

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

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

Очистите любой предыдущий вывод, чтобы вступил в силу только последний вывод.

×⊕‽L⊞Oυω

Вставьте пустую строку в предопределенный массив. Это делает длину массива равной количеству обработанных к настоящему времени повторений, поэтому возьмите его длину, возьмите случайное число в неявном исключающем диапазоне, добавьте 1 и повторите следующую строку много раз.

⁺⪫⁺´≔θ´´θ

Добавьте литеральную строку к θ, затем вставьте литерал ´s между каждым символом, затем добавьте суффикс другой копии θ.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.