37 lines
550 B
Ruby
37 lines
550 B
Ruby
require 'set'
|
|
|
|
class Set
|
|
|
|
#
|
|
# @author Phrogz
|
|
def power_set
|
|
if empty?
|
|
Set[self]
|
|
else
|
|
any_value = [to_a.first]
|
|
subsubs = (self - any_value).power_set
|
|
subsubs + subsubs.map{ |subset| subset + any_value }
|
|
end
|
|
end
|
|
end
|
|
|
|
class Array
|
|
|
|
# TODO: Move to Array extensions.
|
|
|
|
#
|
|
# @author Phrogz
|
|
def power_set
|
|
if empty?
|
|
[self]
|
|
else
|
|
subset = dup
|
|
value = [ subset.pop ]
|
|
subsubs = subset.power_set
|
|
subsubs.concat( subsubs.map{ |subset| subset + value } )
|
|
end
|
|
end
|
|
|
|
end
|
|
|