|
def part(s, args)
|
|
return [[]] if args.empty?
|
|
s.combination(args[0]).each_with_object([]) do |c, res|
|
|
part(s - c, args[1..-1]).each{|r| res << ([c] + r)}
|
|
end
|
|
end
|
|
def partitions(args)
|
|
return [[]] if args.empty?
|
|
part((1..args.inject(:+)).to_a, args)
|
|
end
|