JS.49 · Игры
Задача
Реализовать угадывание числа с подсказками больше/меньше.
Алгоритм
Фабрика возвращает функцию-угадайку; загаданное число и счётчик попыток хранятся в замыкании.
Исходный код
// Игра «угадай число» на замыкании
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('угадал'));
Пояснения
Замыкание сохраняет доступ к переменным внешней функции после её завершения — приватное состояние.