//Задание на черный пояс // -------------УСЛОВИЕ------------- // Сделать предыдущее задание на черный пояс в упрощенном виде: не использовать четырехмерный массив для хранения истории, // а использовать ассоциативный массив: Например, если пользователь ввел 1212 за последние четыре хода, то мы ищем то, что было введено последний раз после такой последовательности: // var history = "1212" // var predictValue = predictArray[history] // в predictValue то, что ввел последний раз пользователь после нажатий 1212 // var newValue = prompt("введите 1 или 2",""); // predictArray[history] = newValue //сохраняем новый ввод //сдвигаем историю // -------------РЕШЕНИЕ------------- const task20block = document.createElement('div'); task20block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px"; const task20title = document.createElement('h2'); task20title.innerText = 'Task-20 Задание на черный пояс: гадалка'; const task20comment = document.createElement('p'); task20comment.innerText = 'Возможно сохранение истории в строку длиной n-символов'; const playVangaBtn = document.createElement('button'); playVangaBtn.innerText = 'Play'; playVangaBtn.style = 'margin-bottom:20px'; root.appendChild(task20block); task20block.appendChild(task20title); task20block.appendChild(task20comment); task20block.appendChild(playVangaBtn); playVangaBtn.onclick = () => { let history = ''; let predictArray = {}; let VangaNumber = null; let step = null; let userNumber = null; const historyDeep=+prompt('Введите кол-во элементов, записываемых в историю') // Формирование 1-го элемента history for (step = 0; step < historyDeep; step++) { VangaNumber = (Math.random() > 0.5) ? 1 : 2; console.log(`Гадалка задумала: ${VangaNumber}`); userNumber = prompt('Введите одно из чисел: 1 или 2',''); if (!(userNumber === null)) { if (!(userNumber === "")) { if (userNumber == 1 || userNumber == 2) { history += userNumber; VangaNumber == userNumber ? alert(`Гадалка угадала, что ты загадал ${userNumber} `) : alert('Гадалка не угадала твое число') } else { alert("Ошибка ввода. Нужно ввести число 1 или 2"); step--; } } else { alert("Ошибка ввода. Нужно ввести число 1 или 2"); step--; } } else break; } console.log(`history=${ history }`); // Формирование 2-ой и более строк history и внесение статистики в predictArray while (!(userNumber === null)) { //Проверка наличия записи в predictArray if (!(history in predictArray)) { VangaNumber = (Math.random() > 0.5) ? 1 : 2; console.log(`Гадалка задумала: ${VangaNumber}`); } else { VangaNumber = predictArray[history]; console.log(`Гадалка задумала: ${VangaNumber}`);} userNumber = prompt('Введите одно из чисел: 1 или 2','') if (!(userNumber === null)) { if (!(userNumber === "")) { if (userNumber == 1 || userNumber == 2) { VangaNumber == userNumber ? alert(`Гадалка угадала, что ты загадал ${userNumber} `) : alert('Гадалка не угадала твое число'); //Перезапись нужного элемента массива predictArray predictArray[history] = userNumber; history+=userNumber; history=history.slice(1); console.log(`history=${history}`); console.log(predictArray); } else { alert("Ошибка ввода. Нужно ввести число 1 или 2"); step--; } } else { alert("Ошибка ввода. Нужно ввести число 1 или 2"); step--; } } else break; } console.log(`predictArray=`); console.log(predictArray); const task20predictArray = document.createElement('p'); task20predictArray.innerText = `predictArray=${JSON.stringify(predictArray)}`; task20block.appendChild(task20predictArray); }