作者:萝莉莲籽芯 | 来源:互联网 | 2023-02-01 15:56
使用J语言,我希望获得数组元素计数的映射.
具体来说,我想输入一个带有两到多个字母的小写英文单词,然后取回单词中的每对字母以及出现的次数.
我需要一个动词来提供这样的东西,无论你认为合适的J结构如何:
对于'可可':
co 2
oc 1
oa 1
对于'香蕉':
ba 1
an 2
na 2
对于'牛奶':
mi 1
il 1
lk 1
对于'到':
to 1
(对于像'a'这样的单字母单词,任务未定义且不会尝试.)
(顺序并不重要,这就是我碰巧列出它们的方式.)
我可以轻松地将单词中的连续字母对作为矩阵或框列表:
2(] ;._3)'cocoa'
co
oc
co
oa
]
2(<;._3)'cocoa'
?????????????
?co?oc?co?oa?
?????????????
但是我需要帮助从那里到对数映射.
我知道〜.和〜:但我不只想返回重复的唯一元素或索引.我想要计数的映射.
NuVoc的"Loopless"页面表明/(或/ \.或/ \)是我应该寻找累积问题的地方.我熟悉/对数值数组的算术运算,但是对于你/我我不知道你需要积累什么样的字母组合才能组成y.
(注意:我已经可以在没有帮助的情况下使用Java或Python等"常规"语言执行此操作.关于SO的类似问题适用于与J.语法和语义截然不同的语言.我对这种问题的惯用J方法很感兴趣. )
1> Tikkanz..:
要获得2个字母组合的列表,我将使用dyadic infix(\
):
2 ]\ 'banana'
ba
an
na
an
na
要计算出现的情况,立即想到的原语是key(/.
)
#/.~ 2 ]\ 'banana'
1 2 2
如果要将计数与字母组合相匹配,可以将动词扩展到以下分支:
({. ; #)/.~ 2 ]\ 'banana'
??????
?ba?1?
??????
?an?2?
??????
?na?2?
??????