うえのです。

On Mon, 17 Feb 2003 20:20:34 +0900
Masahiro Sato <msato / echem.titech.ac.jp> wrote:

> 配列からべき集合をつくるメソッドがないかと検索したら、
> ruby-talkにはあったのですが日本語のほうには
> なかったのでこちらに投稿(?)しておこうと思います。
snip..
> いちおう正しく動くと思いますが、
> もっといいアルゴリズムがあるのではないかと思います。
> そういうのがあったら、もしくは既存のメソッドがあれば
> 教えてください。

べき集合しか求められませんが、こんなのは如何でしょう。

class Array
  def power
    ret = []
    0.upto(2**size - 1) { |n|
      a = []
      each { |i|
        a.push i if n & 1 == 1
        n >>= 1
      }
      ret.push a
    }
    ret
  end
end

p [].power      # => [[]]
p [1].power     # => [[],[1]]
p [1,2].power   # => [[], [1], [2], [1, 2]]
p [1,2,3].power # => [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]



 --  ----  -     - - -- -
うえの かつひろ <unnie / blue.sky.or.jp>