Guess Number Higher or Lower

EasyBinary SearchInteractive

Solution

export function guessNumber(n: number, guess: (num: number) => number): number {
  let answer = n;
  let [start, end] = [1, n];
  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    const result = guess(mid);
    if (result === 0) {
      answer = mid;
      break;
    } else if (result === 1) {
      start = mid + 1;
    } else {
      end = mid - 1;
    }
  }
  return answer;
}
 
export function guess(pick: number) {
  return (num: number) => {
    if (pick === num) return 0;
    return pick < num ? -1 : 1;
  };
}