AFON // радиотехник affonya@mail.ru
← Все проекты JavaScript

Угадай число (замыкание)

Игра «угадай число» на замыкании, хранящем состояние.

JS.49 · Игры

Задача

Реализовать угадывание числа с подсказками больше/меньше.

Алгоритм

Фабрика возвращает функцию-угадайку; загаданное число и счётчик попыток хранятся в замыкании.

Исходный код

⇩ Скачать 49-ugaday-chislo.js

// Игра «угадай число» на замыкании
function makeGame() {
  const secret = Math.floor(Math.random() * 100) + 1;
  let tries = 0;
  return guess => {
    tries++;
    if (guess < secret) return 'больше';
    if (guess > secret) return 'меньше';
    return `угадал за ${tries} попыток`;
  };
}

// демонстрация бинарного поиска ответа
const game = makeGame();
let lo = 1, hi = 100, r;
do { const g = (lo + hi) >> 1; r = game(g);
     console.log(`пробую ${g}: ${r}`);
     if (r === 'больше') lo = g + 1; else if (r === 'меньше') hi = g - 1;
} while (!r.startsWith('угадал'));

Пояснения

Замыкание сохраняет доступ к переменным внешней функции после её завершения — приватное состояние.