@@ -5,6 +5,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document-js</title>
</head>
- <body></body>
+ <body>
+ <div id="matrix"></div>
+ </body>
<script src="../javascript/hw1.js" type="module"></script>
</html>
@@ -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>
+// <button id='ok'>OK</button>
+// <button id='cancel'>Cancel</button>
+// </body>
+const body = {
+ tagName: 'body',
+ subTags: [
+ {
+ tagName: 'div',
+ tagName: 'span',
+ text: 'Enter a data please:',
+ },
+ tagName: 'br',
+ tagName: 'input',
+ attrs: {
+ type: 'text',
+ id: 'name',
+ id: 'surname',
+ ],
+ tagName: 'button',
+ text: 'OK',
+ id: 'ok',
+ text: 'Cancel',
+ 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;
+//обратите внимание на цикличность ссылок в объектах, если вы все сделали правильно, то
+// 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
+// let userConfirm;
+// userConfirm = prompt('Please select filed!');
+// userConfirm && emptyArray.push(userConfirm);
+// } while (userConfirm);
+//array fill nopush
+//Сделайте предыдущее задание, не используя push, а обращаясь к элементам по индексу.
+// if (userConfirm)
+// emptyArray[emptyArray.length === 0 ? 0 : emptyArray.length] = userConfirm;
+//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) => {
+// if (j % 2 === 0) {
+// row += firstSighn;
+// } else {
+// row += secondSighn;
+// 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;
+// 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);
+// 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++) {
+// 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;
+// 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();