想象一下,我想从1到3中取数字并形成一个矩阵,以便表示每个可能的配对,例如,
1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3
这是我用J制定的一元动词:
($~ (-:@# , 2:)) , ,"0/~ 1+i.y
最初我曾认为,"0/~ 1+i.y
就足够了,但遗憾的是产生了以下输出:
1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3
换句话说,它的形状是3 3 2,我想要一些形状为9的东西。我能想到解决它的唯一方法是将所有数据倒入一个新的形状。我确信必须有一种更简洁的方法来做到这一点。有人知道吗?
答案 0 :(得分:5)
可以简化重塑中间结果的过程。删除最顶层的轴通常使用,/
,因此在您的情况下,完成的短语可以是,/ ,"0/~ 1+i.y
答案 1 :(得分:4)
一种方式(在排列编目的容量中使用{
作为monad):
>,{ 2#<1+i.y
编辑:
这个方案有一些乐趣:
所有可能的排列:
>,{ y#<1+i.y
按顺序配置数字:
>,{ x#<1+i.y
答案 2 :(得分:2)
我意识到这个问题已经过时了,但有一种更简单的方法:在三进制中计数到9,然后加1。
1 + 3 3 #: i.9
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
3 3 & #:
为您提供两位数字。一般的“基础3”动词是3 & #.^:_1
。