comninationは配列の組み合わせを列記してくれるメソッドです。
ary #=> [1, 10, 100, 2, 43] ary.combination(3).each{|i| p i} # [1, 10, 100] # [1, 10, 2] # [1, 10, 43] # [1, 100, 2] # [1, 100, 43] # [1, 2, 43] # [10, 100, 2] # [10, 100, 43] # [10, 2, 43] # [100, 2, 43]
ただ、これだと引数に合わせた数字の個数しか数え上げてくれません。
こういう場合は、Enumrableでぐるぐる回して作るしか無い・・・?
(0..ary.size).each.with_object(hoge ||= []) {|i| hoge += ary.combination(i).to_a }.uniq.select {|i| i.sum > 150}