RosettaCodeData/Task/Ordered-Partitions/Ruby/ordered-partitions-2.rb

11 lines
265 B
Ruby

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