如何知道在红宝石中有几种组合阵列的可能性

时间:2017-05-03 12:33:20

标签: arrays ruby random sum

我有一个数组@ary = [1, 3, 4, 2, 7, 8, 9],我想知道组合的可能性有多少等于9。

我应该有四种可能性,可以添加等于9 [1,8][2, 3, 4][9][2, 7],但在我的代码中,我只知道两种可能性和只是可以在这个问题上展示一种可能性。

def sums (num, target)
 random1 = num.sample
 random2 = num.sample
 if random1+random2 == target
   ary1 = [random1, random2]
 end
end

2 个答案:

答案 0 :(得分:3)

您可以使用Array#combination

(1..ary.size).inject(0) do |a, e| 
  a + ary.combination(e).count { |e| e.sum == 9 } 
end
#=> 4

如果您的ruby版本低于2.4,则可以使用inject(:+)代替sum

答案 1 :(得分:3)

如果您对组合本身感兴趣而不仅仅是计数:

(1..a.size).flat_map { |n| a.combination(n).to_a }
  .keep_if { |c| c.inject(:+) == 9 }

#=> [[9], [1, 8], [2, 7], [3, 4, 2]]