Drill

ProblemsGo › patterns

The whole-number square root

mediumpatternsBinary searchMathGo

A layout routine sizes a square grid big enough to hold a number of tiles, and needs the square root as a whole number without trusting floating point.

integerRoot(tiles: int) → 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 integerRoot(tiles int) int {
	
}

Worked examples

CallResult
integerRoot(16)4
integerRoot(15)3
integerRoot(1)1
integerRoot(0)0

Hint

The answer lies between 0 and the input. Halve that range each step, testing whether the middle squared is still within bounds.

Reference solution in Go
func integerRoot(tiles int) int {
	lo, hi, best := 0, tiles, 0
	for lo <= hi {
	    mid := (lo + hi) / 2
	    if mid*mid <= tiles {
	        best = mid
	        lo = mid + 1
	    } else {
	        hi = mid - 1
	    }
	}
	return best
}

The same problem in another language

More patterns problems in Go