//ДЗ: Вложенные декларативные структуры и код в них. Отображение циклических и //древовидных структур.Циклы. //html tree // //
// Enter a data please:
// // //
//
// // //
// const body = { tagName: 'body', subTags: [ { tagName: 'div', subTags: [ { tagName: 'span', text: 'Enter a data please:', }, { tagName: 'br', }, { tagName: 'input', attrs: { type: 'text', id: 'name', }, }, { tagName: 'input', attrs: { type: 'text', id: 'surname', }, }, ], }, { tagName: 'div', subTags: [ { tagName: 'button', text: 'OK', attrs: { id: 'ok', }, }, { tagName: 'button', text: 'Cancel', attrs: { id: 'cancel', }, }, ], }, ], }; // console.log( // body.subTags[1].subTags[0].text, // 'and', // body.subTags[1].subTags[1].text // ); //Выведите значения текста во второй кнопке, используя . и []. // console.log(body.subTags[0].subTags[3].attrs.id); //Выведите значение атрибута id во втором input, используя . и []. //declarative fields //Как известно, элемент массива и объекта может быть любого типа данных JS, //т.е.в коде может быть любое выражение, которое вычисляется в то или иное //значение типа данных.А значит, мы можем применять функции для ввода данных //типа confirm или prompt: // const laptop = { // brand: prompt('Enter a brand') || 'HP', // type: prompt('Enter a type') || '440 G4', // model: prompt('Enter a model') || 'Y7Z75EA', // ram: +prompt('Enter a ram') || 4, // size: +prompt('Enter a size') || 14, // weight: +prompt('Enter a weight') || 1.8, // resolution: { // width: +prompt('Enter a width') || 1920, // height: +prompt('Enter a height') || 1080, // }, // }; // const { // brand, // type, // model, // ram, // size, // weight, // resolution: { width, height }, // } = laptop; // console.log(brand, type, model, ram, size, weight, width, height); // const phone = { // brand: prompt('Enter a brand') || 'meizu', // model: prompt('Enter a model') || 'm2', // ram: +prompt('Enter a ram') || 2, // color: prompt('Enter a color') || 'black', // }; // const { brand: phoneBrand, model: phoneModel, ram: phoneRam, color } = phone; // console.log(phoneBrand, phoneModel, phoneRam, color); // const person = { // name: prompt('Enter a name') || 'Donald', // surname: prompt('Enter a surname') || 'Trump', // married: confirm('Married?'), // }; // const { name, surname, married } = person; // console.log(name, surname, married); //object links //Добавьте персоне гаджеты, используя новые поля smartphone и laptop в объекте персоны // person.smartphone = phone; // person.laptop = laptop; //Добавьте владельца в гаджеты, используя новое поле owner в объектах телефона и ноутбука. // laptop.owner = person; // phone.owner = person; //обратите внимание на цикличность ссылок в объектах, если вы все сделали правильно, то // console.log( // person.smartphone.owner.laptop.owner.smartphone == person.smartphone // ); //imperative array fill 3 //Создайте пустой массив и добавьте в него три элемента, введенные пользователем //(prompt), используя императивный подход(несколько операторов подряд) // const emptyArray = []; // const firstPrompt = prompt('Write something'); // const secondPrompt = prompt('Write something else'); // const thirdPrompt = prompt('Write something again'); // emptyArray.push(firstPrompt, secondPrompt, thirdPrompt); // console.log(emptyArray); //while confirm //Сделайте цикл с confirm, который продолжается по Отмена и заканчивается по ОК. // let ageConfirm; // do { // ageConfirm = confirm('Do you have more that 18 years old?'); // } while (!ageConfirm); //array fill //Создайте пустой массив и добавляйте в него элементы, пока пользователь //не нажмет Отмена в очередном prompt.Используйте push для удобства: push // const emptyArray = []; // let userConfirm; // do { // userConfirm = prompt('Please select filed!'); // userConfirm && emptyArray.push(userConfirm); // } while (userConfirm); // console.log(emptyArray); //array fill nopush //Сделайте предыдущее задание, не используя push, а обращаясь к элементам по индексу. // const emptyArray = []; // let userConfirm; // do { // userConfirm = prompt('Please select filed!'); // if (userConfirm) // emptyArray[emptyArray.length === 0 ? 0 : emptyArray.length] = userConfirm; // } while (userConfirm); // console.log(emptyArray); //infinite probability //Создайте бесконечный цикл, который прерывается с помощью конструкции break, //когда Math.random() > 0.9.Код должен подсчитывать количество итераций //и вывести это число с помощью alert. // for (var i = 1; i < Infinity; i++) { // if (Math.random() > 0.9) { // alert( // `Loop made ${i} iterations before Math.random() > 0.9 was equel to true` // ); // break; // } // console.log(i); // } //empty loop //Сделайте цикл с prompt, который прерывается по нажатию OK и продолжается //по нажатию "Отмена" c пустым телом цикла. // const promptValue = prompt('How are you'); // while (is === null) { // console.log('executin with empty body of loop'); // } //progression sum //Подсчитать сумму арифметической прогрессии от 1 до N c шагом 3 (1,4,7,10,13,16,19,22,25,28) //используя цикл for. // const progressionSum = (N = 2, startValue = 1, step = 3) => { // let sum = startValue; // let sumResult = startValue; // for (let i = 1; i < N; i++) { // sum += step; // sumResult += sum; // } // return sumResult; // }; // console.log(progressionSum(10, 1, 3)); //chess one line //Сформировать строку " # # # # # " с помощью цикла for. //Длина строки может быть четной и нечетной, и указывается в одном месте в коде. // const chessOneLine = (value = '#', lenght = 5) => { // let str = ''; // for (let i = 0; i < lenght; i++) { // str += value; // } // return str; // }; // console.log(chessOneLine()); //numbers //Сформировать строку c помощью вложенных циклов. Для перевода строки используйте \n. // const isertedLoop = (n) => { // let table = ''; // for (let i = 0; i < n; i++) { // let row = ''; // for (let j = 0; j < n; j++) { // row += j; // } // table = `${table}\n${row}`; // } // return table; // }; // console.log(isertedLoop(10)); //chess //Сформируйте строку с шахматной доской из вложенных циклов. //Для перевода строки используйте \n.Код должен поддерживать легкое изменение размеров доски. // const chessLoop = (n, firstSighn, secondSighn) => { // let table = ''; // for (let i = 0; i < n; i++) { // let row = ''; // for (let j = 0; j < n; j++) { // if (j % 2 === 0) { // row += firstSighn; // } else { // row += secondSighn; // } // } // table = `${table}\n${row}`; // } // return table; // }; // console.log(chessLoop(10, '.', '#')); //cubes //Сформируйте массив из N элементов, содержащий в себе кубы индексов, т. е: // const cubes = (N = 1, pow = 3) => { // const indexesArrayInPow = []; // for (let i = 0; i < N; i++) { // indexesArrayInPow.push(Math.pow(i, pow)); // } // return indexesArrayInPow; // }; // console.log(cubes(5, 3)); //multiply table //C помощью вложенного цикла сформируйте массив массивов "таблица умножения". //Для инициализации вложенных массивов используйте //arr[i] = [] //в i-тый элемент массива заносится новый пустой массив //arr[5][6] должен быть равен, соответственно, 30, arr[7][2] == 14 и так далее. // const multiplyTable = () => { // let table = []; // for (let i = 0; i < 10; i++) { // table[i] = []; // for (let j = 0; j < 10; j++) { // table[i][j] = i * j; // } // table; // } // return table; // }; // const result = multiplyTable(); // console.log(result[5][6], result[7][2]); //matrix to html table //Сделайте вложенный цикл, который формирует HTML-таблицу в переменной //строкового типа из любого двумерного массива.Т.е.если в нём использовать //результат работы предыдущего задания, то получится таблица умножения в HTML // const matrixToHtmltable = (twoDimensionalArray) => { // const table = document.createElement('table'); // for (let i = 1; i < twoDimensionalArray.length; i++) { // const tr = document.createElement('tr'); // for (let j = 1; j < twoDimensionalArray[i].length; j++) { // const th = document.createElement('th'); // th.textContent = `${j}*${i}=${twoDimensionalArray[j][i]}`; // tr.appendChild(th); // } // table.appendChild(tr); // } // return table; // }; // const tableMatrix = matrixToHtmltable(result); // const matrixDiv = document.getElementById('matrix'); // matrixDiv.append(tableMatrix); // console.log(matrixDiv); //Задание на синий пояс: Треугольник //Сформировать следующую строку - треугольник: // const trangl = (firstSign = '.', secondSign = '#') => { // let firTree = ''; // const middle = [5]; // for (let i = 0; i < 6; i++) { // let row = ''; // if (i !== 0) { // middle.unshift(middle[0] - 1); // middle.push(middle[middle.length - 1] + 1); // } // for (let j = 0; j < 11; j++) { // if (middle.includes(j)) { // row += secondSign; // } else { // row += firstSign; // } // } // firTree = `${firTree}\n${row}`; // } // return firTree; // }; // console.log(trangl()); //Задание на черный пояс: Электронная гадалка //Пользователь вводит 0 или 1. Гадалка пытается угадать, что введет пользователь //(естественно перед его вводом), но не показывает пользователю, //что бы пользователь не выбрал противоположный вариант, а выводит //предполагаемый вариант в консоль, скрытую от пользователя. // function makeDimensional(dim, lvl, arr) { // if (lvl === 1) return []; // if (!lvl) lvl = dim; // if (!arr) arr = []; // for (let i = 0, l = dim; i < l; i += 1) { // arr[i] = makeDimensional(dim, lvl - 1, arr[i]); // } // return arr; // } // const predictArray = makeDimensional(4); // const hystory = [1, 1, 1, 1]; // const internalGame = () => { // const answer = confirm( // 'Choose OK or Cancel to play in this game and will see if you guess answer of PC ' // ) // ? 0 // : 1; // predictArray[hystory[0]][hystory[1]][hystory[2]][hystory[3]] = answer; // console.log(hystory, 'hystory before changes'); // hystory.shift(); // hystory.push(answer); // console.log(hystory, 'hystory after changes'); // console.log(predictArray); // internalGame(); // }; // internalGame();