|
@@ -0,0 +1,397 @@
|
|
|
+//ДЗ: Вложенные декларативные структуры и код в них. Отображение циклических и
|
|
|
+//древовидных структур.Циклы.
|
|
|
+
|
|
|
+//html tree
|
|
|
+// <body>
|
|
|
+// <div>
|
|
|
+// <span>Enter a data please:</span><br/>
|
|
|
+// <input type='text' id='name'>
|
|
|
+// <input type='text' id='surname'>
|
|
|
+// </div>
|
|
|
+// <div>
|
|
|
+// <button id='ok'>OK</button>
|
|
|
+// <button id='cancel'>Cancel</button>
|
|
|
+// </div>
|
|
|
+// </body>
|
|
|
+
|
|
|
+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();
|