def self.reduce_partition(data, partitions)
partitioned_data = Array.new
return data if (not data) or data.empty?
if partitions >= data.length
data.each do |datum|
partitioned_data << [datum]
end
elsif (data.length >= partitions * 2)
size = data.length / partitions
if (data.length % partitions != 0)
size += 1
end
(0..partitions - 1).each do |i|
partitioned_data[i] = data[i * size, size]
end
else
partitions = (data.size < partitions ? data.size : partitions)
(0..partitions - 1).each { |i| partitioned_data[i] = Array.new }
data.each_with_index do |datum, i|
partitioned_data[i % partitions] << datum
end
end
partitioned_data
end