关于系列
首先,您可以像对待其他任何代码高尔夫挑战赛一样对待它,并回答它而不必担心系列赛。但是,在所有挑战中都有排行榜。您可以在第一篇文章中找到排行榜以及有关该系列的更多信息。
漏洞8:随机播放一个无限列表
您应该编写一个函数或程序,该函数或程序将一个无限列表作为输入并返回该列表的改组版本。
关于无限I / O
您可以通过多种方法来输入和产生此挑战的输出:
- 您可以采用正整数列表或其字符串表示形式,也可以采用字符串或可打印ASCII字符列表(0x20至0x7E,包括0x20至0x7E)。输出格式必须与输入格式匹配。从现在开始,无论您选择哪个选项,我都将数据称为“列表”。
- 您可以从无限标准输入流中读取列表,并将输出连续写入无限标准输出流中。解决方案不应依赖任何特定值或值序列来确保输出流被定期写入和刷新(例如
5
,输入列表中只有a时,您不能仅写入输出)。当然,如果您读取列表的字符串表示形式,则可以等到遇到列表分隔符后再试。 - 在支持它们的语言中,您可以编写一个函数,该函数接受并返回一个惰性无限列表或字符串。
- 在支持它们的语言中,您可以实现一个无限生成器,该生成器将另一个生成器作为输入。
- 另外,您可以编写一个不带参数的函数,并在每次调用时返回一个输出值。在这种情况下,可以假定已定义一个不带任何参数的函数,并且每次调用时都返回下一个输入值。您可以自由选择该函数的名称。
您可能会假设您的程序可以永远运行并且可以使用无限内存。(可以通过有限的内存来解决此问题,但这意味着您可以泄漏内存。)
关于随机性
对于在无穷大输入的位置i上读取的任何值v,它必须有一个正概率使其最终在无穷大输出的位置i-9到i + 9中(除非该位置为负) )。对于不同的输出位置甚至不同的输入位置,这些概率不必相同。如果您的解决方案还可以将值改组到更远的其他位置,那就很好。
因此,您的解决方案不必将第一个值拖曳到列表后面很远的地方,也不需要将最后一个值拖曳到第一个位置,尽管这样做可以,只要所有位置都离列表9步即可。输入是可能的。
例如,如果您将以下字符串用作输入,则___
表示X
必须能够在输出中结束的所有位置:
___________________
abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...
如果您的语言缺少内置的随机数生成器,或者您不想使用它,则可以使用其他种子值作为输入,并使用种子实现自己适合的RNG。此页面可能对此有所帮助。
无论您的解决方案使用哪种实际分布,它都必须几乎肯定在有限(但任意)的时间后产生下一个值。
请简要说明您的实现如何满足这些要求。
计分
这是代码高尔夫球,因此以字节为单位的最短有效答案为准。
排行榜
为确保您的答案显示出来,请使用以下Markdown模板以标题开头每个答案:
# Language Name, N bytes
N
您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数来保持标题。例如:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(目前未显示该语言,但是该代码段确实需要并对其进行解析,并且将来我可能会添加一个语言排行榜。)