//ДЗ: Вложенные декларативные структуры и код в них. Отображение циклических и
//древовидных структур.Циклы.
//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();