This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user