Problems › TypeScript › reporting
Bucket some readings
A chart needs counts per band rather than raw readings — how many orders fell between 0 and 9, 10 and 19, and so on.
- Readings are never negative.
- A bucket is named by the value it starts at, written as a string: "0", "10", "20".
- Buckets with nothing in them do not appear.
- A bucket size of zero or less gives an empty result.
histogram(values: list<int>, bucketSize: int) → map<string, int>
Where you start
function histogram(values: number[], bucketSize: number): Record<string, number> {
}
Worked examples
| Call | Result |
|---|---|
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 TypeScript
function histogram(values: number[], bucketSize: number): Record<string, number> {
if (bucketSize <= 0) return {};
const result: Record<string, number> = {};
for (const v of values) {
const k = String(Math.floor(v / bucketSize) * bucketSize);
result[k] = (result[k] || 0) + 1;
}
return result;
}