Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 成对均匀分布数组,组合/置换问题_Ruby_Combinations_Permutation - Fatal编程技术网

Ruby 成对均匀分布数组,组合/置换问题

Ruby 成对均匀分布数组,组合/置换问题,ruby,combinations,permutation,Ruby,Combinations,Permutation,我试图解决一个组合/排列问题,我有10个人,他们应该审查其他人的想法。每个人应准确回顾3个想法,例如: 第1人:评论2、3、4 第2人:评论5,8,9 第三人:评论9、10、1 ... 等等 这些限制是: 10是一个动态数字,因此解决方案也应该是动态的,让我们调用这个变量m 3也是一个动态数字,因此解决方案也适用于其他数字,让我们调用此变量n 子阵列的选择(谁审查谁)应该是随机的,如果相同的10个人参加了2个不同的测试,他们不应该一遍又一遍地评估同一个人 简言之:在一群m人中,每个人都应该准确地

我试图解决一个组合/排列问题,我有10个人,他们应该审查其他人的想法。每个人应准确回顾3个想法,例如: 第1人:评论2、3、4 第2人:评论5,8,9 第三人:评论9、10、1 ... 等等

这些限制是:

  • 10是一个动态数字,因此解决方案也应该是动态的,让我们调用这个变量
    m
  • 3也是一个动态数字,因此解决方案也适用于其他数字,让我们调用此变量
    n
  • 子阵列的选择(谁审查谁)应该是随机的,如果相同的10个人参加了2个不同的测试,他们不应该一遍又一遍地评估同一个人
  • 简言之:在一群
    m
    人中,每个人都应该准确地审查
    n
    人,同时接受
    n
    审查

    我已经能够在ruby中找到一些非常有用的方法,比如
    组合
    ,基本上让我做一些类似的事情:

    [1,2,3,4,5,6,7,8,9,10].combination(2).to_a
    => [[1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8], [1, 9], [1, 10], [2, 3], [2, 4], [2, 5], [2, 6], [2, 7], [2, 8], [2, 9], [2, 10], [3, 4], [3, 5], [3, 6], [3, 7], [3, 8], [3, 9], [3, 10], [4, 5], [4, 6], [4, 7], [4, 8], [4, 9], [4, 10], [5, 6], [5, 7], [5, 8], [5, 9], [5, 10], [6, 7], [6, 8], [6, 9], [6, 10], [7, 8], [7, 9], [7, 10], [8, 9], [8, 10], [9, 10]]
    
    我还可以将它组合成3个
    (n)

    然而,我不知道如何从这些子数组中挑选出确切的数量,以便每个人从
    m
    人中接收
    n
    评论。也许有一些名字和这类问题有关,我不太熟悉


    谢谢你给了m个数字来建立一个“伙伴”阵列:

    然后,每个人回顾接下来的三个:

    n = 3    
    reviews = fellows.map.with_index.with_object({}) { |(f, i), h| h[f] = fellows.rotate(i)[1..n] }
    #=> {0=>[1, 2, 3], 1=>[2, 3, 4], 2=>[3, 4, 5], 3=>[4, 5, 6], 4=>[5, 6, 7], 5=>[6, 7, 8], 6=>[7, 8, 9], 7=>[8, 9, 0], 8=>[9, 0, 1], 9=>[0, 1, 2]}
    
    也许需要随机化

    reviews = fellows.shuffle!.map....
    

    简化为
    fellows=0.upto(m-1);fellows.zip(fellows.cycle.each_cons(n)).to_h
    我不认为你遗漏了什么。我建议你删除第一句话。注:
    fellows=(0..m-1)。致@engineersmnky,谢谢<代码>循环
    ,我忘了。我发布了我想出的第一个工作代码。另外,我认为它应该
    reviews=fellows.shuffle!。地图…
    ,砰!,工作properly@iGian这一切都取决于想要的结果是什么
    shuffle
    将导致键和值被洗牌,其中as
    shuffle
    将只导致键被洗牌。我仍然不清楚期望的输出是什么,即使这是一个很好的方法。起初,我不能100%确定仅仅旋转是否适用于
    m
    的每种情况,从分类的角度看它使理解变得非常简单。非常感谢。
    n = 3    
    reviews = fellows.map.with_index.with_object({}) { |(f, i), h| h[f] = fellows.rotate(i)[1..n] }
    #=> {0=>[1, 2, 3], 1=>[2, 3, 4], 2=>[3, 4, 5], 3=>[4, 5, 6], 4=>[5, 6, 7], 5=>[6, 7, 8], 6=>[7, 8, 9], 7=>[8, 9, 0], 8=>[9, 0, 1], 9=>[0, 1, 2]}
    
    reviews = fellows.shuffle!.map....