gpt4 book ai didi

algorithm - 在 Haskell 中将不寻常的序列实现为无限列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:58 24 4
gpt4 key购买 nike

我有两个元素作为列表的开头 [1, 2]

这个不寻常的序列是它复制了三个元素后面的某种类型的位数中的数字。例如,在 1 和 2 之后,我们会有另一个 2,然后是两个 1。所需列表的前几个元素将产生

[1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2] 因为

1  2   2  1 1   2  1  2   2  1   2   2

其中前面的数字代表相同数字的迷你序列的长度。

到目前为止,我已尝试使用 replicate 函数根据列表中较早的元素重复相同的数字。

selfrle :: [Int]
selfrle = 1 : 2 : [x | a <- [0..], let x = replicate (selfrle !! a) (selfrle !! (a + 1))) ]

问题是我不明白为什么它不起作用。

最佳答案

并不像 OEIS 中的 https://oeis.org/A000002 那样不寻常并在那里被命名为 Kolakoski 序列。在那里,他们甚至提供了 John Tromp 于 2011 年编写的 Haskell 程序:

a = 1:2: drop 2 (concat . zipWith replicate a . cycle $ [1, 2])

关于algorithm - 在 Haskell 中将不寻常的序列实现为无限列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58295842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com