//Confirms
//Сохраните в массив ответы на вопросы, заданные с помощью confirm. Используйте литеральный (декларативный) синтаксис массивов ([....,....,....])

{
    const arr = [confirm('яблоко фрукт?'), confirm('груша фрукт?'), confirm('морковь фрукт?')]
}

//Prompts
//Сохраните в массив ответы на вопросы, заданные с помощью prompts. Используйте доступ к массиву по индексу и присвоение (arr[....] = ....)

{
    const arr = [];
    arr[0] = confirm('яблоко фрукт?');
    arr[1] = confirm('груша фрукт?');
    arr[2] = confirm('морковь фрукт?');
}

//Item access
//Попросите пользователя ввести (prompt) индекс в массиве. Выведите значение элемента по этому индексу. Попробуйте так же ввести индекс "length".

{
    alert ( arr[ prompt() ] )
}

//Item change
//Попросите пользователя ввести (prompt) индекс в массиве, а так же значение для этого индекса. Присвойте в введенный индекс введенное значение

{
    const arr = [];
    const arrIndex = prompt('введите индекс в массиве');
    const arrValue = prompt('введите индекс в массиве');
    arr[arrIndex] = arrValue;
}

//Multiply table
//Создайте таблицу умножения 5x5 используя декларативный синтаксис вложенных массивов const arr = [[....], [....], [....], .....]. Числа во вложенных массивах должны быть равны произведению индекса внешнего массива на индекс внутреннего массива: arr[2][3] === 6

{   const arr = [[],[],[],[],[],[]]
    arr[0][0] = 0;
    arr[0][1] = 0;
    arr[0][2] = 0;
    arr[0][3] = 0;
    arr[0][4] = 0;
    arr[0][5] = 0;

    arr[1][0] = 0;
    arr[1][1] = 1;
    arr[1][2] = 2;
    arr[1][3] = 3;
    arr[1][4] = 4;
    arr[1][5] = 5;

    arr[2][0] = 0;
    arr[2][1] = 2;
    arr[2][2] = 4;
    arr[2][3] = 6;
    arr[2][4] = 8;
    arr[2][5] = 10;
    
    arr[3][0] = 0;
    arr[3][1] = 3;
    arr[3][2] = 6;
    arr[3][3] = 9;
    arr[3][4] = 12;
    arr[3][5] = 15;

    arr[4][0] = 0;
    arr[4][1] = 4;
    arr[4][2] = 8;
    arr[4][3] = 12;
    arr[4][4] = 16;
    arr[4][5] = 20;

    arr[5][0] = 0;
    arr[5][1] = 5;
    arr[5][2] = 10;
    arr[5][3] = 15;
    arr[5][4] = 20;
    arr[5][5] = 25;
}

//или так. из задания не понятно что конкретно должно быть.

{
    const arr = [

    [0,0,0,0,0,0],
    [0,1,2,3,4,5],
    [0,2,4,6,8,10],
    [0,3,6,9,12,15],
    [0,4,8,12,16,20],
    [0,5,10,15,20,25]

];
}

//Multiply table slice
//Используя slice создайте массив массивов (другую таблицу/матрицу) из таблицы умножения, в которой не будет нулей

const arrCopy = [arr[1].slice(1), arr[2].slice(1), arr[3].slice(1), arr[4].slice(1), arr[5].slice(1)] 

//IndexOf Word
//Спросите у пользователя строку из нескольких слов. Спросите у него искомое слово. Выведите, каким по счету является это слово в строке из нескольких слов. Если слово не найдено, выведите сообщение об этом (а не -1)

{
    const str = prompt ('напишите небольшое предложение.');
    const strArr = str.split(' ');
    const strWordSearch = prompt ('напишите слово из предложения которое вы ввели');
    const strWordIndex = strArr.indexOf(strWordSearch)
    if (strWordIndex < 0){
        alert(`слово "${strWordSearch}" не найдено`)
    }else{
    alert (`слово "${strWordSearch}" будет № ${strWordIndex + 1} по порядку в строке "${str}"`)
    }
}

// Reverse
// Добавьте в массив пять введенных пользователем через prompt элементов(используйте push). Создайте другой массив с этими же элементами в обратном порядке. Для этого извлекайте элементы из первого массива используя pop, добавляйте их во второй используя push

{
    const arr = [];
    arr.push( prompt("введите значение массива №1") );
    arr.push( prompt("введите значение массива №2") );
    arr.push( prompt("введите значение массива №3") );
    arr.push( prompt("введите значение массива №4") );
    arr.push( prompt("введите значение массива №5") );
    const arrCopy = [];
    arrCopy.push(arr.pop());
    arrCopy.push(arr.pop());
    arrCopy.push(arr.pop());
    arrCopy.push(arr.pop());
    arrCopy.push(arr.pop());    
}

//Reverse 2
//Переверните второй массив из предыдущего задания еще раз (последовательность будет как в первом массиве), используя shift и unshift
{
    const arr = [];
    arr.push( prompt("введите значение массива №1") );
    arr.push( prompt("введите значение массива №2") );
    arr.push( prompt("введите значение массива №3") );
    arr.push( prompt("введите значение массива №4") );
    arr.push( prompt("введите значение массива №5") );
    const arrCopy = [];
    arrCopy.push(arr.pop());
    arrCopy.push(arr.pop());
    arrCopy.push(arr.pop());
    arrCopy.push(arr.pop());
    arrCopy.push(arr.pop());
    const arrCopyRevers = [];
    arrCopyRevers.unshift(arrCopy.shift());
    arrCopyRevers.unshift(arrCopy.shift());
    arrCopyRevers.unshift(arrCopy.shift());
    arrCopyRevers.unshift(arrCopy.shift());
    arrCopyRevers.unshift(arrCopy.shift());
}

//Copy
//Скопируйте массив созданный в задании Multiply table неглубоко

{
    const arr = [

        [0,0,0,0,0,0],
        [0,1,2,3,4,5],
        [0,2,4,6,8,10],
        [0,3,6,9,12,15],
        [0,4,8,12,16,20],
        [0,5,10,15,20,25]
    
    ];

    const arr2 = [arr.slice()];
}

//Deep Copy
//Скопируйте массив созданный в задании Multiply table включая вложенные массивы (глубокая копия)

{
    const arr = [

        [0,0,0,0,0,0],
        [0,1,2,3,4,5],
        [0,2,4,6,8,10],
        [0,3,6,9,12,15],
        [0,4,8,12,16,20],
        [0,5,10,15,20,25]
    
    ];

    //условно руками
    const arrCopy = [
    
        arr[0].slice(),
        arr[1].slice(),
        arr[2].slice(),
        arr[3].slice(),
        arr[4].slice(),
        arr[5].slice(),
        
    ]

     // или циклом for of

    for (let a of arr) {
        arrCopy.push(a.slice());
    }
    
}

//Array Equals
//Создайте код, в котором будет две переменных с массивами (arr и arr2), которые равны друг другу (arr1 === arr2)

{
    const arr = [];
    const arr1 = arr;
    alert( arr===arr1)
}

//Flat
//Соберите все элементы всех вложенных массивов из задания Multiply table в один массив. Его длина должна быть равна 25. Используйте spread-оператор
{
    const arr = [

        [1,2,3,4,5],
        [2,4,6,8,10],
        [3,6,9,12,15],
        [4,8,12,16,20],
        [5,10,15,20,25]

    ];

    const arr1 = [...arr[0], ...arr[1], ...arr[2], ...arr[3], ...arr[4], ]
}

// Destruct
// Извлеките первую, пятую и девятую букву из строки, введенной пользователем, используя деструктуризацию. Выведите их
{
    let [letter1,,,,letter5,,,,letter9] = prompt('введите строку, я извлеку 1, 5 , девятую буквы').split('');
    alert(letter1 + letter5 + letter9);
}

//Destruct default
//Извлеките вторую, четвертую и пятую букву из строки, введенной пользователем, используя деструктуризацию. Если в строке таких букв не окажется задайте переменным значение по умолчанию ! (восклицательный знак). Выведите эти переменные

{
    let [,letter2 = '!',,letter4 = '!',letter5 = '!'] = prompt('введите строку, я извлеку 1, 5 , девятую буквы').split('');
    alert(letter2 + letter4 + letter5);
}

//Multiply table rest
//Реализуйте задание Multiply table slice, используя оператор rest при деструктуризации. Используйте вложенную деструктуризацию. После получения четырех обрезанных вложенных массивов - соберите общий массив без нулей

{
    const arr = [

        [0,0,0,0,0,0],
        [0,1,2,3,4,5],
        [0,2,4,6,8,10],
        [0,3,6,9,12,15],
        [0,4,8,12,16,20],
        [0,5,10,15,20,25]
    
    ];

    let [
        ,
        [, ...rest1],
        [, ...rest2],
        [, ... rest3],
        [, ...rest4],
        [, ...rest5]
    ] = arr;

    arrCopy = [rest1, rest2, rest3, rest4, rest5];
}

//For Alert
//Есть массив ["John", "Paul", "George", "Ringo"]. Выведите каждое имя отдельным alert(), используя цикл for .... of

{
    for (let name of ["John", "Paul", "George", "Ringo"]) {
    alert(name);
    }
}

//For Select Option

/* const currencies = ["USD", "EUR", "GBP", "UAH"]
let   str = "<select>"
for (let currency of currencies){
//    YOUR MAGIC HERE
}
str+= "</select>"
document.write(str) //document.write отобразит ваш HTML на странице */

//Используя заготовку выше, создайте выпадающий список с валютами. Элементы выпадающего списка создаются с помощью тэга <option>
{
    const currencies = ["USD", "EUR", "GBP", "UAH"]
    let   str = "<select>"
    for (let currency of currencies){
    str += "<option>"+ currency + "</option>"
    }
    str+= "</select>"
    document.write(str)
}

//For Table Horizontal
/* const names = ["John", "Paul", "George", "Ringo"]
let   str = "<table>"
for (let currency of currencies){
//    YOUR MAGIC HERE
}
str+= "</table>"
document.write(str) //document.write отобразит ваш HTML на странице
Аналогично, добейтесь вывода имен в ячейки таблицы по горизонтали (одна строка с четырьмя ячейками)*/

{
    const names = ["John", "Paul", "George", "Ringo"]
        let   str = "<table>"
        for (let name of names){
            str += "<td>" + name + "</td>"
        }
    str+= "</table>"
    document.write(str)
}

//For Table Vertical
/*
const names = ["John", "Paul", "George", "Ringo"]
let   str = "<table>"
for (let name of names){
//    YOUR MAGIC HERE
}
str+= "</table>"
document.write(str) //document.write отобразит ваш HTML на странице
Аналогично, добейтесь вывода имен в ячейки таблицы по вертикали(одна колонка с четырьмя строками, в каждой строке - одна ячейка)
*/

{
    const names = ["John", "Paul", "George", "Ringo"]
    let   str = "<table>"
    for (let name of names){
        str += "<tr><td>" + name + "</td></tr>"
    }
str+= "</table>"
document.write(str)
}


//For Table Letters
//Используя заготовку выше, создайте таблицу 3x4. В каждой строке по три ячейки с буквами, четыре строки, так как 4 валюты в массиве.

const currencies = ["USD", "EUR", "GBP", "UAH"]
let   str = "<table>"
for (let currency of currencies){ //цикл создает строки
    //одна итерация цикла создает ОДНУ СТРОКУ
    str += "<tr>"

    console.log(currency)
    for (let letter of currency){ //цикл создает ЯЧЕЙКИ в ОДНОЙ СТРОКЕ
        //одна итерация цикла создает ОДНУ ЯЧЕЙКУ

        str += "<td>" + letter + "</td>"
        console.log(letter)
    }

    str += "</tr>"
}
str+= "</table>"
document.write(str) //document.write отобразит ваш HTML на странице


//For Multiply Table
//Выведите таблицу умножения 5x5 из задания Multiply table в таблицу, используя вложенные for .... of и document.write
//Сделайте черезстрочную подсветку - задавайте четным строкам один цвет фона, нечетным - другой

{
    const arr = [

        [0,0,0,0,0,0],
        [0,1,2,3,4,5],
        [0,2,4,6,8,10],
        [0,3,6,9,12,15],
        [0,4,8,12,16,20],
        [0,5,10,15,20,25]
        
        ];
        
    let str = "<table>"
    let i = 1
        
    for (let tr of arr){
            
        if (i++ % 2 === 0){
            str += '<tr style="background-color: grey;">'
        }else{
            str += "<tr>"
        }
        
        for (let td of tr){
            str += "<td>" + td + "</td>"
        }
        str += "</tr>"
    }
        
    str += "</table>" 
    document.write(str)
}

//Function Capitalize
//Реализуйте задачу String: capitalize как отдельную функцию:

{
    let str = "cANBerRa";
    let f = (x) => x[0].toUpperCase() + x.slice(1).toLowerCase();
    let result = f(str);
    console.log(result); //Canberra
}

//Map Capitalize
//Пусть пользователь вводит строку. Разбейте её по пробелам. Используя map и capitalize создайте массив в котором каждое слово будет с большой буквы. Соберите массив в строку обратно

{
    let f = (x) => x[0].toUpperCase() + x.slice(1).toLowerCase();
    let str = prompt('введите строку');
    let arr = str.split(' ');
    let arrCapitalize = arr.map(f);
    alert (arrCapitalize.join(' '))
}

//Filter Lexics
//Пусть пользователь вводит строку. Разбейте её по пробелам. Используя filter верните true если элемент массива не состоит в определенном массиве недопустимых слов. Если же элемент массива - недопустимое слово, функция, переданная в filter должна возвращать false. Соберите массив в строку обратно.

{
    let str = prompt('введите строку. Ни слова о политике, я вырежу все фамилии президентов');
    let arr = str.split(" ");
    const f = (word) => {
        const arrBadWords = ["Кравчук","Кучма","Ющенко","Янукович","Порошенко","Зеленский"];
        for (let BadWord of arrBadWords){
            if (word.toLowerCase() === BadWord.toLowerCase()){ return false}
        }
        return true;
    }
    let arrNew = arr.filter(f);
   alert(arrNew.join(' '));
}

// Beep Lexics
//Пусть пользователь вводит строку. Разбейте её по пробелам. Используя map и тернарный оператор верните из функции слово без изменений, если оно не состоит в каком-то другом массиве запрещенных слов. Если же слово состоит в этом списке, функция должна вернуть слово BEEP. Соберите массив обратно в строку через пробел. Таким образом вы сможете реализовать замену нескольких запрещенных слов на BEEP.

{
    let str = prompt('введите строку. Ни слова о политике, я вырежу все фамилии президентов');
    let arr = str.split(" ");
    const f = (word) => {
        const arrBadWords = ["Кравчук","Кучма","Ющенко","Янукович","Порошенко","Зеленский"];
        for (let BadWord of arrBadWords){
            if (word.toLowerCase() === BadWord.toLowerCase()){ return "BEEP"}
        }
        return word;
    }
    let arrNew = arr.map(f);
   alert(arrNew.join(' '));
}

// Reduce HTML
{ const currencies = ["USD", "EUR", "GBP", "UAH"]
    let str          = "<select>"
    str             += currencies.reduce( (a,b) => a + "<option>" + b, "")
    str             += "</select>"
    document.write(str)
}

//For Brackets Hell Check
//Пусть пользователь вводит строку с любыми парными скобками в ней, например [ [ ] () {{{[]()}}}]. Найдите место возможной ошибки (непарности) в этой строке. Для этого, каждую открывающую скобку добавляйте в стек. При нахождении закрывающей она должна соответствовать вершине стека. Если она не соответстует, выведите сообщение об ошибке и позицию в строке. Если соответствует - уберите скобку из стека. Если строка ошибок не содержит, порадуйте пользователя.

{
    const line = prompt()
    const bracketsStack = []
    let i = 0
    for (let character of line){
        if (character === "[" || character === "(" || character === "{" ){
            bracketsStack.push(character);
        }else if(character === ']' && bracketsStack.at(-1) === '[' ||
        character === '}' && bracketsStack.at(-1) === '{' ||
        character === ')' && bracketsStack.at(-1) === '('
        ){
            bracketsStack.pop()
        }
        else if (character !== " ") {
            alert ('Вероятно есть проблема, нет парной скобки на позиции: ' + i)
            break;
        }
         
        
        i++
    }
   
        if (i === line.length) alert('all ok!')
    
}