Тема: Задачки на цикли, массивы, коллекции, объекты на JS
Варианты заданий будут делится на 3 уровня сложности, где 1 - самый легкий уровень сложности, 3 - наиболее высокий соответственно.
Задача 1 уровня сложности - небольшая задачка, которую можно решить в несколько строк кода, зная синтаксис языка или необходимо написать маленький простой алгоритм
Задача 2 уровня - задача, где необходимо поработать с структурами данных (СД), возможно заиспользовать несколько СД и придумать алгоритм решения представленной задачи, учесть краевые "кейсы".
Задача 3 уровня - задача, с более углубленной работой с СД в JS, необходимо либо самому придумать алгоритм, либо поиспользовать какой-нибудь неочевидный на первый взгляд, также учесть краевые кейсы.
P.S Задачи 2 и 3 уровней встречаются в качестве базовых на собеседованиях на стажировки в крупные IT компании такие как: Яндекс, Ozon, Aliexpress, VK и т.д.
Для выполнения домашнего задания нужно набрать 4 балла.
Уровень задачи | Количество баллов |
---|---|
1 уровень | 1 балл |
2 уровень | 2 балла |
3 уровень | 4 балла |
Напишите функцию merge
, которая будет принимать на вход несколько объектов (любое количество),
и возвращать единственный объект, содержащий все поля из всех объектов.
Если одно и то же поле было в нескольких объектах, необходимо оставить значение,
которое встретилось раньше
Напишите функцию euclid
, которая позволяет находить НОД натуральных чисел.
Функция должна работать с любым количеством аргументов
Напишите функцию inverse
, которая меняет порядок элементов в массике на противоположный.
Если в функцию вторым аргументом передаётся число — то переставляются все элементы массива
кроме нескольких первых (количество зависит от числа).
Если число отрицательное — то на месте остаются элементы в конце массива
Напишите функцию flatten
, которая будет принимать на вход массив массивов и создавать из них один общий массив.
Массивы могут быть любой вложенности
Пример:
[1, 2, 3, [4, 5, 6, [10, 20, 30]]] -> [1, 2, 3, 4, 5, 6, 10, 20 ,30]
Напишите функцию sort
, которая будет сортировать буквы в словах по алфавиту,
а потом получившиеся слова в предложении — тоже.
Первую букву каждого слова она сделает прописной, остальные — строчными
Напишите функцию anagram
, которая будет принимать на вход массив слов
и группировать его на группы слов-анаграмм.
Выводить только группы из двух и более слов.
Слова в группах, как и сами группы, должны быть отсортированными
Напишите функцию rle, которая реализует RLE сжатие
Напишите функцию plainify, которая получает на вход обычный объект c вложенными свойствами, а возвращает plain-объект
Напишите функцию solve, которая принимает на вход строку с математическим выражением, зависящим от переменной x и значение этой переменной, а возвращает вычисленное значение этого выражения. В выражении фигурируют операции сложения, вычитания, умножения. Используются только целые числа и скобки
Дан список неотрицательных целых чисел, повторяющихся элементов в списке нет. Нужно преобразовать это множество в строку, сворачивая соседние по числовому ряду числа в диапазоны.
Пример
[1,2,3,5,6,7, 10, 11, 12, 14, 16,17, 18] -> '1-7,10-12,14,16-18'
Дана строка - последовательность, которая может состоять как из 0, так и 1. Необходимо найти максимальную последовательность 1 и вывести ее длину.
Пример
'1000000111100011111010111101111111' -> 7
Проверить что строка является палиндромом. Палиндромом называется строка, которая пишется одинаково слева направо и справа налево. Написать 2 решения.
isPalindrom('А роза упала на лапу Азора') // true isPalindrom(121) // true isPalindrom(1890) // false
Напишите функцию diff, которая возвращает массив, содержащий все элементы первого, которые не находятся во втором.
Напишите функцию findCouple(array, number), которая ищет в массиве все пары целых чисел, сумма которых равна заданному значению и возвращает их в виде массива строк. const neededNumber = 5; const array = [1, 6, 5, 2, 7, 5, 1, 4, 3, 9, 8, 11, 10, 18];
findCouple(array, neededNumber) // '1+4, 2+3, ...'
Качественная разница между двумя парами (a, b) и (c, d) определяется как (a * b) - (c * d).
Например, качественная разница между (5, 6) и (2, 7) - это (5 * 6) - (2 * 7) = 16. Дан массив целых чисел, необходимо найти 4 различных индекса w, x, y, и z, таких что, качественная разница между парами (nums[w], nums[x]) и (nums[y], nums[z]) была максимальной. Функция возвращает максимальную качественную разницу.
Входные данные: nums = [5,6,2,7,4] Результат: 34 Пояснение: Мы можем выбрать индексы 1 и 3 для первой пары (6, 7) и индексы 2 и 4 для второй пары (2, 4). Качественная разница тогда - (6 * 7) - (2 * 4) = 34.
Дана квадратная матрица matrix, верните сумму основной и побочной диагоналей матрицы.
Ввод: matrix = [[1,2,3], [4,5,6], [7,8,9]] Выход: 25
Дан массив целых чисел. Необходимо написать функцию, возвращающую сумму всех уникальных элементов. Уникальные - неповторяющиеся элементы.
Написать функцию, которая проверит можно ли получить из одного массива другой каким-либо способом.
Пример Даны два массива [1, 2, 3, 8, -2] и [2, 3, 8, 1, -2] Результат: true
Даны массив строк words и строка str. Обе строки состоят только из строчных английских букв.
Необходимо посчитать все слова, которые являются префиксами строки str и вывести их количество.
Префикс строки - это подстрока, которая встречается в начале строки. Подстрока - это непрерывная последовательность символов внутри строки.
Пример
Входные данные: words = ["a", "b", "c", "ab","bc", "abc"], s = "abc" Вывод: 3
Напишите код, объединяющий любое количество плоских массивов цифр в один. Функция должна вернуть строку, в которой будут идти все полученные цифры в порядке убывания их значений через пробел.
Пример:
Ввод: first = [1, 2, 3]; second = [-1, -10, 20]
Вывод: '20 3 2 1 -1 -10'
Напишите функцию, которая заполняет новый массив предоставленным значением. Ожидаемый результат: (3, 'a') => ['a', 'a', 'a']
// * @param {number} arraySize - размер массива
// * @param {?} data - значение для массива
// * @returns {Array}
fill(arraySize, data) // ['a', 'a', 'a']
Напишите функцию erase
, которая очищает массив от нежелательных значений, таких как false, undefined, пустые строки, ноль, null.
const data = [0, 1, false, 2, undefined, '', 3, null];
console.log(erase(data)) // [1, 2, 3]
Напишите функцию removeValues
, возвращает новый массив без предоставленных значений. Используйте примитивные типы.
Ожидаемый результат: [1, 2, 3, 1, 2] без 1, 2 => [3]
const data = [1, 2, 3, 1, 2];
console.log(removeValues(data, 1, 2)); // [3]
Напишите функцию concatenate
, которая принимает массив строк и символ-разделитель. Функция должна вернуть строчку
склеенную по данному разделителю.
concatenate(['Я','Учусь','на','лучшей','кафедре'], ' ') // Я учусь на лучшей кафедре
Напишите функцию countIdentic(arr)
, которая возвращает количество повторяющихся элементов в массиве.
Напишите функцию sumOfSquares(arr)
, которая возвращает сумму квадратов значений массива.
Напишите функцию getSumAndMultOfArray()
, который определяет сумму и произведение значений массива.
Напишите функцию moveElement(arr,from,to)
, которая позволяет переместить элемент массива из позиции from в позицию to.
Напишите функцию isEqualArrays
, которая сравнивает два массива и возвращает true, если они идентичны.
Напишите функцию isEqualObj
, которая сравнивает два объекта и возвращает true, если они идентичны.
Напишите функцию isEqual
, которая сравнивает любые 2 значения и возвращает true, если они идентичны.
Варианты значений по типам - все 6 типов и могут быть массивы. Технически массив, это Object, но чтобы явно его отделить
будем "условно" считать его другим значением.
Вычислить среднее арифметическое элементов массива и вернуть его.