Drill

ProblemsGo › reporting

Bucket some readings

mediumreportingHash mapsArraysMathGo

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>

Go 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

func histogram(values []int, bucketSize int) map[string]int {
	
}

Worked examples

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

Hint

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

Reference solution in Go
func histogram(values []int, bucketSize int) map[string]int {
	result := map[string]int{}
	if bucketSize <= 0 {
		return result
	}
	for _, v := range values {
		k := strconv.Itoa(v / bucketSize * bucketSize)
		result[k]++
	}
	return result
}

The same problem in another language

More reporting problems in Go