Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

配列の全組み合わせを生成する

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}

例の如く、もっと上手い方法があるやも知れません。
※sumメソッドについてはこちらを参照のこと