滚动奎因骰子


19

创建一个输出自身的程序。

但是,如果源代码重复了n次(意味着将源代码的副本连接到末尾n-1次),则输出原始源代码的概率应该为1 / n,输出源代码的概率为1 / n。源代码重复两次,输出源代码的1 / n概率重复3次,...,输出源代码的1 / n概率重复n次。

例如,如果您的程序是foobar,则它应始终准确输出foobar。但是,如果运行foobarfoobarfoobarfoobar的话,应该是每一个输出的1/4的机会foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar

  • 每个可能的输出的分布应该相等
  • 除了应用标准I / O方法和禁止标准漏洞外,还应用标准quine规则(无法访问其自己的源等)。
  • 这是代码高尔夫球,所以最短答案以字节为单位

伪随机是否足够好?
wastl

1
@wastl是的,没关系
JMigst

2
您的定义略有偏离。如果您重复一遍(即foobarfoobar),那么它只会打印foobar
Veskah,

1
@Veskah foobarfoobarfoobar重复了两次,一次也没有。
Nit

@Nit从源头开始。如果再次使用它,则只重复了一次,但是有两个实例。
维斯卡

Answers:



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

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@
 !

在线尝试!

说明

"

就像2D语言中的许多quines一样,它以a开头,"该wrap环绕其自身并推送除"自身之外的整个第一行。

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υω⁺⪫⁺´≔θ´´θ

在线尝试!没有详细版本,因为副词修饰符当前阻塞"´"。大多数情况下,基于高尔夫的木炭藜,您就可以成为优质的藜!。说明:

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

将文字字符串分配θ⎚×⊕‽L⊞Oυω⁺⪫⁺´≔θ´´θθ

清除任何先前的输出,以便仅最后一个输出生效。

×⊕‽L⊞Oυω

将空字符串推入预定义的数组。这使数组的长度等于到目前为止已处理的重复数,因此,取其长度,将一个随机数取为隐式的排他范围,加1,然后重复以下字符串多次。

⁺⪫⁺´≔θ´´θ

将文字字符串添加θ,然后´在每个字符之间插入文字s,然后为附加另一个后缀θ

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.