Skip to content

Instantly share code, notes, and snippets.

@ndbroadbent
Last active November 28, 2018 12:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ndbroadbent/ba93b017053377b610d15bbf2ec66523 to your computer and use it in GitHub Desktop.
Save ndbroadbent/ba93b017053377b610d15bbf2ec66523 to your computer and use it in GitHub Desktop.
class ArrayPartition
def self.partition_counts(count, max)
return [count] if count <= max
group_count = (count / max) + (count % max > 0 ? 1 : 0)
result = [0] * group_count
count.times do |n|
result[n % group_count] += 1
end
result.sort
end
end
RSpec.describe ArrayPartition do
it 'partitions an array into optimal groups with max number of elements' do
expect(ArrayPartition.partition_counts(5, 10)).to eq [5]
expect(ArrayPartition.partition_counts(6, 10)).to eq [6]
expect(ArrayPartition.partition_counts(7, 10)).to eq [7]
expect(ArrayPartition.partition_counts(10, 10)).to eq [10]
expect(ArrayPartition.partition_counts(11, 10)).to eq [5, 6]
expect(ArrayPartition.partition_counts(12, 10)).to eq [6, 6]
expect(ArrayPartition.partition_counts(13, 10)).to eq [6, 7]
expect(ArrayPartition.partition_counts(16, 10)).to eq [8, 8]
expect(ArrayPartition.partition_counts(20, 10)).to eq [10, 10]
expect(ArrayPartition.partition_counts(21, 10)).to eq [7, 7, 7]
expect(ArrayPartition.partition_counts(22, 10)).to eq [7, 7, 8]
expect(ArrayPartition.partition_counts(5, 20)).to eq [5]
expect(ArrayPartition.partition_counts(10, 20)).to eq [10]
expect(ArrayPartition.partition_counts(15, 20)).to eq [15]
expect(ArrayPartition.partition_counts(20, 20)).to eq [20]
expect(ArrayPartition.partition_counts(21, 20)).to eq [10, 11]
expect(ArrayPartition.partition_counts(30, 20)).to eq [15, 15]
expect(ArrayPartition.partition_counts(40, 20)).to eq [20, 20]
expect(ArrayPartition.partition_counts(41, 20)).to eq [13, 14, 14]
expect(ArrayPartition.partition_counts(42, 20)).to eq [14, 14, 14]
expect(ArrayPartition.partition_counts(43, 20)).to eq [14, 14, 15]
expect(ArrayPartition.partition_counts(45, 20)).to eq [15, 15, 15]
expect(ArrayPartition.partition_counts(50, 20)).to eq [16, 17, 17]
expect(ArrayPartition.partition_counts(55, 20)).to eq [18, 18, 19]
expect(ArrayPartition.partition_counts(60, 20)).to eq [20, 20, 20]
expect(ArrayPartition.partition_counts(61, 20)).to eq [15, 15, 15, 16]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment