代码之家  ›  专栏  ›  技术社区  ›  dukereg

J中给定长度的所有布尔可能性

j
  •  0
  • dukereg  · 技术社区  · 6 年前

    我想要一个最简单的动词,它给出给定长度的所有布尔列表。

    例如

       f=. NB. Insert magic here
    
       f 2
    0 0
    0 1
    1 0
    1 1
    
       f 3
    0 0 0
    0 0 1
    0 1 0
    0 1 1
    1 0 0
    1 0 1
    1 1 0
    1 1 1
    
    0 回复  |  直到 6 年前
        1
  •  3
  •   Tikkanz    6 年前

    此功能最近已添加到 stats/base 插件。

       load 'stats/base/combinatorial'  NB. or just load 'stats'
       permrep 2    NB. permutations of size 2 from 2 items with replacement
    0 0
    0 1
    1 0
    1 1
       3 permrep 2  NB. permutations of size 3 from 2 items with replacement
    0 0 0
    0 0 1
    0 1 0
    0 1 1
    1 0 0
    1 0 1
    1 1 0
    1 1 1
       permrep      NB. display definition of permrep
    $:~ :(# #: i.@^~)
    

    使用Qt IDE,您可以查看定义 permrep 和朋友一起进入 open 'stats/base/combinatorial' 在学期窗口中。或者你可以 view it on Github .

    界定 f 如你问题中所述,以下内容应足够:

       f=: permrep&2
       f=: (# #: i.@^~)&2  NB. alternatively
       f 3
    0 0 0
    0 0 1
    0 1 0
    0 1 1
    1 0 0
    1 0 1
    1 1 0
    1 1 1
    
        2
  •  1
  •   dukereg    6 年前

    这个 #: (“Antibase 2”)vocab页面有一个与我想要的内容相近的示例。我不太理解这个原语,但下面的代码给出了数字0到2^n-1的以2为基数的数字列表:

       f=. #:@i.@(2^])
    

    (谢谢丹让我抬起头来 #: .)