using System.Collections.Generic;
public static void Main()
Test(100, 2, new [] { Range(0, 49), Range(50, 100) });
Test(100, 3, new [] { Range(0, 32), Range(33, 65), Range(66, 100) });
Test(101, 3, new [] { Range(0, 32), Range(33, 65), Range(66, 101) });
Test(2, 3, new [] { Range(0, 2) });
Test(0, 3, new Tuple<int, int>[] { });
public static void Test(int length, int chunkCount, IEnumerable<Tuple<int, int>> expected)
var result = Split2(length, chunkCount);
if (!expected.SequenceEqual(result))
length={length}, chunkCount={chunkCount}
Expected: [{String.Join(", ", expected)}]
Got: [{String.Join(", ", result)}
public static Tuple<int, int> Range(int it1, int it2)
return new Tuple<int, int>(it1, it2);
public static IEnumerable<Tuple<int, int>> Split2(int length, int chunkCount)
int chunkSize = length / chunkCount;
for (int i = 0; i < chunkCount; i++)
int startPos = chunkSize * i;
int endPos = i == chunkCount - 1 ? length : (startPos + chunkSize - 1);
yield return new Tuple<int, int>(startPos, endPos);