// Материал
// В этих и предыдущих ДЗ прогоните кусочки кода из материала лекции через отладчик и внимательно посмотрите что происходит
{
    //  сделано
}



// Confirms
// Сохраните в массив ответы на вопросы, заданные с помощью confirm.Используйте литеральный(декларативный) синтаксис массивов([...., ...., ....])
{
    const arr = [confirm('ты учишься в A-level?'), confirm('Сейчас зима на улице?'), confirm('Ты младше 2 лет?'), confirm('У тебя часто выключают свет?')]
    console.log(arr)
}



// Prompts
// Сохраните в массив ответы на вопросы, заданные с помощью prompts.Используйте доступ к массиву по индексу и присвоение(arr[....] = ....)
{
    const arr = []
    arr[arr.length] = prompt('ты учишься в A-level?')
    arr[arr.length] = prompt('Сейчас зима на улице?')
    arr[arr.length] = prompt('Ты младше 2 лет?')
    arr[arr.length] = prompt('У тебя часто выключают свет?')
    console.log(arr)
}



// Item access
// Попросите пользователя ввести(prompt) индекс в массиве.Выведите значение элемента по этому индексу.Попробуйте так же ввести индекс "length".
{
    const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'A', 'B', 'C', 'D', 'E', 'F']
    alert(arr[prompt('Введите в поле ниже цифру от 0 до 15, или "length"', 'length')])
}



// Item change
// Попросите пользователя ввести(prompt) индекс в массиве, а так же значение для этого индекса.Присвойте в введенный индекс введенное значение
{
    const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'A', 'B', 'C', 'D', 'E', 'F']
    arr[prompt('Введите в поле ниже цифру от 0 до 15')] = prompt('Введите любое значение для этого индекса')
    console.log(arr)
}



// Multiply table
// Создайте таблицу умножения 5x5 используя декларативный синтаксис вложенных массивов const arr = [[....], [....], [....], .....].Числа во вложенных массивах должны быть равны произведению индекса внешнего массива на индекс внутреннего массива: arr[2][3] === 6
{
    const arr = [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12], [0, 4, 8, 12, 16]]
    console.log(arr[4][2])
}



// Multiply table slice
// Используя slice создайте массив массивов(другую таблицу / матрицу) из таблицы умножения, в которой не будет нулей
{
    const arr = [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12], [0, 4, 8, 12, 16]]
    const arr2 = [arr[1].slice(1), arr[2].slice(1), arr[3].slice(1), arr[4].slice(1)]
    console.log(arr2)
}



// IndexOf Word
// Спросите у пользователя строку из нескольких слов.Спросите у него искомое слово.Выведите, каким по счету является это слово в строке из нескольких слов.Если слово не найдено, выведите сообщение об этом(а не - 1)
{
    const string = prompt('Введите в поле ниже любую строку, состоящую из нескольких слов', 'Или оставьте по умолчанию эту строку чтобы не париться').toLowerCase()
    const searchingWord = prompt('Какое слово будем искать?').toLowerCase()
    string.split(' ').indexOf(searchingWord) !== -1 ? alert(`Слово ${string.split(' ').indexOf(searchingWord) + 1}-ое по счету в строке`) : alert('Простите, такого слова нет в строке')
}



// Reverse
// Добавьте в массив пять введенных пользователем через prompt элементов(используйте push).Создайте другой массив с этими же элементами в обратном порядке.Для этого извлекайте элементы из первого массива используя pop, добавляйте их во второй используя push
{
    const arr = []
    arr.push(prompt('Введите в поле ниже строку или цифру'), prompt('Введите в поле ниже строку или цифру'), prompt('Введите в поле ниже строку или цифру'), prompt('Введите в поле ниже строку или цифру'), prompt('Введите в поле ниже строку или цифру'))
    const arr2 = []
    arr2.push(arr.pop(), arr.pop(), arr.pop(), arr.pop(), arr.pop())
    console.log(arr2)
}



// Reverse 2
// Переверните второй массив из предыдущего задания еще раз(последовательность будет как в первом массиве), используя shift и unshift
{
    const arr = []
    arr.push(prompt('Введите в поле ниже строку или цифру'), prompt('Введите в поле ниже строку или цифру'), prompt('Введите в поле ниже строку или цифру'), prompt('Введите в поле ниже строку или цифру'), prompt('Введите в поле ниже строку или цифру'))
    const arr2 = []
    arr2.push(arr.pop(), arr.pop(), arr.pop(), arr.pop(), arr.pop())
    const arr3 = []
    arr3.unshift(arr2.shift())
    arr3.unshift(arr2.shift())
    arr3.unshift(arr2.shift())
    arr3.unshift(arr2.shift())
    arr3.unshift(arr2.shift())
    console.log(arr3)
}



// Copy
// Скопируйте массив созданный в задании Multiply table неглубоко
{
    const arr = [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12], [0, 4, 8, 12, 16]]
    arrCopy = arr.slice()
    console.log(arr === arrCopy)
    console.log(arr[0] === arrCopy[0])
}
// альтернативный вариант
{
    const arr = [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12], [0, 4, 8, 12, 16]]
    arrCopy = [...arr]
    console.log(arr === arrCopy)
    console.log(arr[0] === arrCopy[0])
}



// Deep Copy
// Скопируйте массив созданный в задании Multiply table включая вложенные массивы(глубокая копия)
{
    const arr = [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12], [0, 4, 8, 12, 16]]
    const [a, b, c, d, e] = arr
    const arrCopy = [a.slice(), b.slice(), c.slice(), d.slice(), e.slice(),]
    console.log(arr === arrCopy)
    console.log(arr[0] === arrCopy[0])
}



// Array Equals
// Создайте код, в котором будет две переменных с массивами(arr и arr2), которые равны друг другу(arr1 === arr2)
{
    const arr1 = [1, 2, 3, 4, 5]
    const arr2 = arr1
    console.log(arr1 === arr2)
}



// Flat
// Соберите все элементы всех вложенных массивов из задания Multiply table в один массив.Его длина должна быть равна 25. Используйте spread - оператор
{
    const arr = [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12], [0, 4, 8, 12, 16]]
    const arrSum = [...arr[0], ...arr[1], ...arr[2], ...arr[3], ...arr[4],]
    console.log(arrSum.length)
}



// Destruct
// Извлеките первую, пятую и девятую букву из строки, введенной пользователем, используя деструктуризацию.Выведите их
{
    const string = prompt('Введите, пожалуйста, в строке ниже какую-то фразу', 'Или оставьте эту фразу по умолчанию').toUpperCase()
    const [a, , b, , , , , , c] = string.split('')
    alert(`Первая буква: ${a};
    третья буква: ${b};
    девятая буква: ${c}.`)
}



// Destruct default
// Извлеките вторую, четвертую и пятую букву из строки, введенной пользователем, используя деструктуризацию.Если в строке таких букв не окажется задайте переменным значение по умолчанию!(восклицательный знак).Выведите эти переменные
{
    const string = prompt('Введите, пожалуйста, в строке ниже какую-то фразу', 'Или оставьте эту фразу по умолчанию').toUpperCase()
    const [, a = '!', , b = '!', c = '!'] = string.split('')
    alert(`Вторая буква: ${a};
    четвертая буква: ${b};
    пятая буква: ${c}.`)
}



// Multiply table rest
// Реализуйте задание Multiply table slice, используя оператор rest при деструктуризации.Используйте вложенную деструктуризацию.После получения четырех обрезанных вложенных массивов - соберите общий массив без нулей
{
    const arr = [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12], [0, 4, 8, 12, 16]]
    let [a, [b, ...restFisrtArr], [c, ...restSecondArr], [d, ...restThirdArr], [e, ...restFourthArr]] = arr
    const arrResult = [restFisrtArr, restSecondArr, restThirdArr, restFourthArr]
    console.log(arrResult)
}



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



// For Select Option
// Используя заготовку выше, создайте выпадающий список с валютами.Элементы выпадающего списка создаются с помощью тэга < 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>"
    str += "<tr>"
    for (let name of names) {
        str += `<td>${name}</td>`
    }
    str += "</tr>"
    str += "</table>"
    document.write(str)
}



// For Table Vertical
// Аналогично, добейтесь вывода имен в ячейки таблицы по вертикали(одна колонка с четырьмя строками, в каждой строке - одна ячейка)
{
    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)
}



// For Multiply Table
// Выведите таблицу умножения 5x5 из задания Multiply table в таблицу, используя вложенные for .... of и document.write.
// Сделайте черезстрочную подсветку - задавайте четным строкам один цвет фона, нечетным - другой
{
    const arr = [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12], [0, 4, 8, 12, 16]]
    let i = 0
    let str = `<table style="border-collapse: collapse;">`
    for (let string of arr) {
        str += (i % 2) ? `<tr style = "background-color:orange">` : `<tr style = "background-color:red">`
        i++
        for (let number of string) {
            str += `<td>${number}</td>`
        }
        str += `</tr>`
    }
    str += `</table>`
    document.write(str)
}



// Function Capitalize
// Реализуйте задачу String: capitalize как отдельную функцию:
{
    const capitalize = str => {
        let result = `${str[0].toUpperCase()}${str.slice(1).toLowerCase()}`
        return result //именно этот код обеспечит возврат результата функции
    }
    alert(capitalize(prompt('ВВедиТЕ ниже Любую ФраЗУ С РазныМ', 'ВВедиТЕ ниже Любую ФраЗУ С РазныМ')))
}



// Map Capitalize
// Пусть пользователь вводит строку.Разбейте её по пробелам.Используя map и capitalize создайте массив в котором каждое слово будет с большой буквы.Соберите массив в строку обратно
{
    const string = prompt('Введите в поле ниже фразу, которую вы считаете подходящей!', 'иЛИ оСТАВЬТЕ эту фразу по умолчанию').split(' ')
    const capsName = string.map(string => `${string[0].toUpperCase()}${string.slice(1).toLowerCase()}`)
    alert(capsName.join(' '))
}



// Filter Lexics
// Пусть пользователь вводит строку.Разбейте её по пробелам. Используя filter верните true если элемент массива не состоит в определенном массиве недопустимых слов.Если же элемент массива - недопустимое слово, функция, переданная в filter должна возвращать false.Соберите массив в строку обратно
{
    const string = prompt('Введите в поле ниже любую фразу с нецензурной лексикой', 'Или оставьте эту фразу с некрасивый и грубый словами').split(' ')
    const badWords = ['некрасивый', 'грубый']
    const result = string.filter(x => x !== badWords[0] && x !== badWords[1])
    alert(result.join(' '))
}




// Beep Lexics
// Пусть пользователь вводит строку.Разбейте её по пробелам.Используя map и тернарный оператор верните из функции слово без изменений, если оно не состоит в каком - то другом массиве запрещенных слов.Если же слово состоит в этом списке, функция должна вернуть слово BEEP.Соберите массив обратно в строку через пробел.Таким образом вы сможете реализовать замену нескольких запрещенных слов на BEEP.
{
    const string = prompt('Введите в поле ниже любую фразу с нецензурной лексикой', 'Или оставьте эту фразу с некрасивый и грубый словами').split(' ')
    const badWords = ['некрасивый', 'грубый']
    const result = string.map(x => x !== badWords[0] && x !== badWords[1] ? x : 'BEEP')
    alert(result.join(' '))
}



// Реализуйте задачу For Select Option используя reduce:
{
    const currencies = ["USD", "EUR", "GBP", "UAH"]
    let str = "<select>"
    str += "<option>"
    str += currencies.reduce((a, b) => (`${a}</option>` + `<option>${b}</option>`))
    str += "</select>"
    document.write(str)
}


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

}