Drill

ProblemsPython › reporting

Bucket some readings

mediumreportingPython

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>, bucket_size: int) → map<string, int>

Solve it in the editor →

Where you start

def histogram(values: list[int], bucket_size: int) -> dict[str, int]:
    

Worked examples

CallResult
histogram([0, 5, 10, 15, 23], 10){"0": 2, "10": 2, "20": 1}
histogram([9, 10], 10){"0": 1, "10": 1}
histogram([1, 2, 3], 1){"1": 1, "2": 1, "3": 1}
histogram([1, 2], 0){}

Hint

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

Reference solution in Python
def histogram(values: list[int], bucket_size: int) -> dict[str, int]:
    if bucket_size <= 0:
        return {}
    result = {}
    for v in values:
        k = str(v // bucket_size * bucket_size)
        result[k] = result.get(k, 0) + 1
    return result

The same problem in another language

More reporting problems in Python