代码之家  ›  专栏  ›  技术社区  ›  Gregory Higley

用于创建数字矩阵的最简洁的J语法

j
  •  3
  • Gregory Higley  · 技术社区  · 14 年前

    假设我想取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

    换句话说,它的形状是32,我想要形状是92的东西。我唯一能想到的解决办法就是把所有的数据注入一个新的形状。我相信一定有更简洁的方法来做这件事。有人知道吗?

    3 回复  |  直到 14 年前
        1
  •  4
  •   MPelletier    14 年前

    单向(使用 {

    >,{ 2#<1+i.y
    

    编辑:

    这项计划带来了一些乐趣:

    所有可能的排列:

    >,{ y#<1+i.y
    

    顺序可配置编号:

    >,{ x#<1+i.y
    
        2
  •  5
  •   kaleidic    14 年前

    重塑中间结果可以简化。移除最上面的轴通常使用 ,/ 所以在你的情况下,完整的短语可能是 ,/ ,"0/~ 1+i.y

        3
  •  2
  •   tangentstorm    10 年前

    我知道这个问题很老了,但有一个更简单的方法:用三进制数到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 & #: 给你两位数。一般的'base3'动词是 3 & #.^:_1