Drill

ProblemsTypeScript › patterns

The whole-number square root

mediumpatternsBinary searchMathTypeScript

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

Solve it in the editor →

Where you start

function integerRoot(tiles: number): number {
  
}

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 TypeScript
function integerRoot(tiles: number): number {
  let lo = 0;
  let hi = tiles;
  let best = 0;
  while (lo <= hi) {
    const mid = Math.floor((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 TypeScript