gpt4 book ai didi

j - 如何在 J 中实现分组算法?

转载 作者:行者123 更新时间:2023-12-04 16:23:22 24 4
gpt4 key购买 nike

我正在尝试实现 A006751在 J 中。这在 Haskell 中很容易做到,比如:

concat . map (\g -> concat [show $ length g, [g !! 0]]) . group . show

(显然这还不完整,但它是它的基本核心。我在这上面花了大约 10 秒钟,所以请相应地对待它。)我可以在 J 中相当容易地实现任何这些,但我无法理解的部分是与 Haskell 的 group 函数相对应的良好、惯用的 J 算法。我可以写一个笨拙的,但感觉不像是好J。

任何人都可以用好的 J 实现 Haskell 的 group 吗?

最佳答案

组通常用 /. 副词完成。

   1 1 2 1 </. 'abcd'
┌───┬─┐
│abd│c│
└───┴─┘

如您所见,它不是连续的。只需像这样按顺序排列您的键(本质上是确定一个项目是否与下一个不同,并对结果 0 和 1 求和):

   neq =. 13 : '0, (}. y) ~: (}: y)'
seqkey =. 13 : '+/\neq y'
(seqkey 1 1 2 1) </. 'abcd'
┌──┬─┬─┐
│ab│c│d│
└──┴─┴─┘

然后我需要的是一个计算项目 (#) 并告诉我它们是什么的函数({. 只选择第一个)。我从 nubcount 得到了一些灵​​感:

   diffseqcount =. 13 : ',(seqkey y) (#,{.)/. y'
diffseqcount 2
1 2
diffseqcount 1 2
1 1 1 2
diffseqcount 1 1 1 2
3 1 1 2

如果你想要第n个结果,就用power:

   diffseqcount(^:10) 2  NB. 10th result
1 3 2 1 1 3 2 1 3 2 2 1 1 3 3 1 1 2 1 3 2 1 2 3 2 2 2 1 1 2

关于j - 如何在 J 中实现分组算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9563878/

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