Drill

ProblemsC# › reporting

Bucket some readings

mediumreportingHash mapsArraysMathC#

A chart needs counts per band rather than raw readings — how many orders fell between 0 and 9, 10 and 19, and so on.

Histogram(values: list<int>, bucketSize: int) → map<string, int>

C# needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.

Solve it in Python →

Where you start

public Dictionary<string, int> Histogram(List<int> values, int bucketSize) {
    
}

Worked examples

CallResult
Histogram(new List<int> { 0, 5, 10, 15, 23 }, 10)new Dictionary<string, int> { { "0", 2 }, { "10", 2 }, { "20", 1 } }
Histogram(new List<int> { 9, 10 }, 10)new Dictionary<string, int> { { "0", 1 }, { "10", 1 } }
Histogram(new List<int> { 1, 2, 3 }, 1)new Dictionary<string, int> { { "1", 1 }, { "2", 1 }, { "3", 1 } }
Histogram(new List<int> { 1, 2 }, 0)new Dictionary<string, int> { }

Hint

Integer-divide by the bucket size, multiply back, and that is the bucket name.

Reference solution in C#
public Dictionary<string, int> Histogram(List<int> values, int bucketSize) {
    var result = new Dictionary<string, int>();
    if (bucketSize <= 0) return result;
    foreach (var v in values) {
        string k = ((v / bucketSize) * bucketSize).ToString();
        result[k] = result.ContainsKey(k) ? result[k] + 1 : 1;
    }
    return result;
}

The same problem in another language

More reporting problems in C#