JSFiddle - React, Tailwind, and code Playground
by Vladimir
HTML
<p>Напиши программу, которая загадывает целое число до 50, и просит пользователя число отгадать. Каждый раз, когда пользовател вводит число, которое ближе к ответу, чем предыдущее предположение пользователя, программа выдает prompt для следующего числа с сообщением "теплее", если новое предположение отдаляется от задуманного числа, программа выводит prompt с сообщением "холоднее". После отгадывания числа программа с помощью alert показывает количество попыток, за сколько было угадано число. Максимальное число попыток: 10 (должно быть настраиваемым). После этого игра считается проиграной, о чем сообщается в alert окошке.</p>
<pre>
Пример работы (мои комментарии идут за //):
загаданное число: 34
программа: Я загадала число. Угадывай, пользователь
пользователь: 20
программа: теплее
пользователь: 10
программа: холоднее
пользователь: 15
программа: теплее
пользователь: 35
программа: теплее // (потому что 35 ближе к 34, чем 15)
пользователь: 45
программа: холоднее
пользователь: 34
программа: угадал, хитрец, за 6 попыток.</pre>
JavaScript
var CHOICE_MAX = 50;
var programChoice = Math.floor((CHOICE_MAX - 1) * Math.random()) + 1;
var currentIteration = 0;
var MAX_ITERATION = 10;
var prevUserChoice = 10 * CHOICE_MAX;
var prevDelta;
var curUserChoice;
var curDelta;
var infoForUser = "Я загадала число. Угадывай, пользователь";
while(currentIteration <= MAX_ITERATION) { // prevent infinity loop with incorrect break
if(currentIteration == MAX_ITERATION) {
alert('Вы не угадали. Было загадано ' + programChoice);
break;
}
if(currentIteration > 0) {
prevDelta = Math.abs(prevUserChoice - programChoice);
curDelta = Math.abs(curUserChoice - programChoice);
if(curDelta === prevDelta) {
infoForUser = 'одинаково тепло';
} else if(curDelta < prevDelta) {
infoForUser = 'теплее';
} else {
infoForUser = 'холоднее';
}
}
do {
curUserChoice = parseInt(prompt(infoForUser));
} while(isNaN(curUserChoice));
if(curUserChoice === programChoice) {
alert('угадал, хитрец, за ' + currentIteration + ' попыток.');
}
}