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