I think this is fun:
def power_set(s) return [[]] if s==[] s=s.to_a res=[] ((2**s.size)...(2**(s.size+1))).each do |i| t=[] check=i.to_s(2)[1..-1] check=check.split("").map{|a| a=="1"} (0...(check.length)).each{|j|t.push(s[j]) if check[j]} res.push(t) end res end irb(main):007:0> a=[] => [] irb(main):008:0> 4.times{a=power_set(a)};a => [[], [[[], [[]]]], [[[]]], [[[]], [[], [[]]]], [[[[]]]], [[[[]]], [[], [[]]]], [[[[]]], [[]]], [[[[]]], [[]], [[], [[]]]], [[]], [[], [[], [[]]]], [[], [[]]], [[], [[]], [[], [[]]]], [[], [[[]]]], [[], [[[]]], [[], [[]]]], [[], [[[]]], [[]]], [[], [[[]]], [[]], [[], [[]]]]]
That is one nice set. If you could have any of the elements in that set, which would you choose?
Comments