Функции Испытания (challenges)
sameParityFilter.js
Реализуйте и экспортируйте по умолчанию функцию, которая принимает на вход массив и возвращает новый, состоящий из элементов, у которых такая же чётность, как и у первого элемента входного массива.
Примеры
sameParity([-1, 0, 1, -3, 10, -2]); // [-1, 1, -3] sameParity([2, 0, 1, -3, 10, -2]); // [2, 0, 10, -2] sameParity([]); // []
Успешных завершений: 96%
findIndexOfNearest.js
Реализуйте и экспортируйте по умолчанию функцию, которая принимает на вход массив чисел и искомое число. Задача функции — найти в массиве ближайшее число к искомому и вернуть его индекс в массиве.
Если в массиве содержится несколько чисел, одновременно являющихся ближайшими к искомому числу, то возвращается наименьший из индексов ближайших чисел.
Примеры
findIndexOfNearest([], 2); // null findIndexOfNearest([15, 10, 3, 4], 0); // 2 findIndexOfNearest([7, 5, 3, 2], 4); // 1 findIndexOfNearest([7, 5, 4, 4, 3], 4); // 2
Успешных завершений: 90%
NRZI код (Non Return to Zero Invertive) — один из способов линейного кодирования. Обладает двумя уровнями сигнала и используется для передачи битовых последовательностей, содержащих только 0 и 1. NRZI применяется, например, в оптических кабелях, где устойчиво распознаются только два состояния сигнала — свет и темнота.
Принцип кодирования
При передаче логического нуля на вход кодирующего устройства передается потенциал, установленный на предыдущем такте (то есть состояние потенциала не меняется), а при передаче логической единицы потенциал инвертируется на противоположный.
solution.js
Реализуйте и экспортируйте по умолчанию функцию, которая принимает строку в виде графического представления линейного сигнала и возвращает строку с бинарным кодом. Внимательно изучите примеры.
Примеры:
const signal1 = '_|¯|____|¯|__|¯¯¯'; nrzi(signal1); // '011000110100' const signal2 = '|¯|___|¯¯¯¯¯|___|¯|_|¯'; nrzi(signal2); // '110010000100111' const signal3 = '¯|___|¯¯¯¯¯|___|¯|_|¯'; nrzi(signal3); // '010010000100111' const signal4 = ''; nrzi(signal4); // '' const signal5 = '|'; nrzi(signal5); // ''
Подсказки
- Символ
|
в строке указывает на переключение сигнала и означает, что уровень сигнала в следующем такте, будет изменён на противоположный по сравнению с предыдущим.
Успешных завершений: 86%
solution.js
Реализуйте и экспортируйте функции ipToInt()
и intToIp()
, которые преобразовывают представление IP-адреса из десятичного формата с точками в 32-битное число в десятичной форме и обратно.
Функция ipToInt()
принимает на вход строку и должна возвращать число. А функция intToIp()
наоборот: принимает на вход число, а возвращает строку.
Примеры
ipToInt('128.32.10.1'); // 2149583361 ipToInt('0.0.0.0'); // 0 ipToInt('255.255.255.255'); // 4294967295 intToIp(2149583361); // '128.32.10.1' intToIp(0); // '0.0.0.0' intToIp(4294967295); // '255.255.255.255'
Подсказки
- IPv4
- Используйте функцию parseInt() для перевода строки в необходимую систему счисления
- Изучите возможности метода toString() для числа, рассмотрите примеры
- Дополнительно можно использовать метод padStart()
Успешных завершений: 82%
validator.js
Реализуйте функцию-предикат isValidIPv6()
, которая проверяет IPv6-адреса (адреса шестой версии интернет протокола) на корректность. Функция принимает на вход строку с адресом IPv6 и возвращает true
, если адрес корректный, а в противном случае false
. Экспортируйте функцию по умолчанию.
Дополнительные условия:
- Работа функции не зависит от регистра символов.
- Ведущие нули в группах цифр необязательны.
- Самая длинная последовательность групп нулей, например,
:0:0:0:
может быть заменена на два двоеточия::
. Такую замену можно произвести только один раз. - Одна группа нулей
:0:
не может быть заменена на::
.
Примеры
isValidIPv6('10:d3:2d06:24:400c:5ee0:be:3d'); // true isValidIPv6('0B0:0F09:7f05:e2F3:0D:0:e0:7000'); // true isValidIPv6('000::B36:3C:00F0:7:937'); // true isValidIPv6('::1'); // true isValidIPv6('2607:G8B0:4010:801::1004'); // false isValidIPv6('1001:208:67:4f00:e3::2c6:0'); // false isValidIPv6('2.001::'); // false isValidIPv6('9f8:0:69S0:9:9:d9a:672:f90d'); // false
Подсказки
- IPv6
- Для проверки пограничных случаев внимательно изучите список IP-адресов в модуле с тестами.
Успешных завершений: 76%
Анаграммы — это слова, которые состоят из одинаковых букв. Например:
- спаниель — апельсин
- карат — карта — катар
- топор — ропот — отпор
filterAnagrams.js
Реализуйте и экспортируйте по умолчанию функцию, которая находит все анаграммы слова. Функция принимает исходное слово и список для проверки (массив), а возвращает массив всех анаграмм. Если в списке слов отсутствуют анаграммы, то возвращается пустой массив.
Примеры
filterAnagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']); // ['aabb', 'bbaa'] filterAnagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']); // ['carer', 'racer'] filterAnagrams('laser', ['lazing', 'lazy', 'lacer']); // []
Успешных завершений: 92%
Для задания цветов в HTML и CSS используются числа в шестнадцатеричной системе счисления. Чтобы не возникало путаницы в определении системы счисления, перед шестнадцатеричным числом ставят символ решетки #
, например, #135278
. Обозначение цвета (rrggbb) разбивается на три составляющие, где первые два символа обозначают красную компоненту цвета, два средних — зеленую, а два последних — синюю. Таким образом каждый из трех цветов — красный, зеленый и синий — может принимать значения от 00 до FF в шестнадцатеричной системе исчисления.
solution.js
При работе с цветами часто нужно получить отдельные значения красного, зеленого и синего (RGB) компонентов цвета в десятичной системе исчисления и наоборот. Реализуйте и экспортируйте функции rgbToHex()
и hexToRgb()
, которые возвращают соответствующие представление цвета.
Примеры:
hexToRgb('#24ab00'); // { r: 36, g: 171, b: 0 } rgbToHex(36, 171, 0); // '#24ab00'
Подсказки:
- Вам может понадобится функция chunk из библиотеки lodash.
Успешных завершений: 88%
Игральная кость - шестигранный кубик, который бросается несколько раз. Гистограмма - это графическое представление данных в виде столбцов или колонок.
histogram.js
Реализуйте и экспортируйте по умолчанию функцию, которая выводит на экран горизонтальную гистограмму. Функция принимает на вход количество бросков кубика и функцию, которая имитирует бросок игральной кости (её реализовывать не нужно). Вызов этой функции генерирует значение от 1 до 6, что соответствует одной из граней игральной кости.
Гистограмма содержит строки, каждой из которых соответствует грань игральной кости и количество выпадений этой грани. Результаты отображаются графически (с помощью символов #
) и в виде числового значения, за исключением случаев, когда количество равно 0 (нулю).
Примеры
import play from '../histogram.js'; play(100, rollDie); // => 1|####################### 23 // 2|################## 18 // 3|############# 13 // 4|#################### 20 // 5|############ 12 // 6|############## 14 play(13, rollDie); // => 1| // 2|## 2 // 3|# 1 // 4|## 2 // 5|#### 4 // 6|#### 4
Подсказки:
- Гистограмма
- Для решения задачи используйте функции из библиотеки lodash
Успешных завершений: 79%
Игральная кость — шестигранный кубик, который бросается несколько раз. Гистограмма — это графическое представление данных в виде столбцов или колонок.
histogram.js
Реализуйте и экспортируйте по умолчанию функцию, которая выводит на экран вертикальную гистограмму. Функция принимает на вход количество бросков кубика и функцию, которая имитирует бросок игральной кости (её реализовывать не нужно). Вызов этой функции генерирует значение от 1 до 6, что соответствует одной из граней игральной кости.
Гистограмма содержит столбцы, каждому из которых соответствует грань игральной кости и количество выпадений этой грани. Результаты отображаются графически (с помощью символов #
) и в виде процентного значения от общего количества бросков, за исключением случаев, когда количество равно 0 (нулю).
Дополнительные условия:
- Процентные значения должны быть прижаты влево относительно столбца.
- Значения сторон игральной кости должны быть посредине столбца.
- Столбцы между собой разделены пробелом
- Количество секций в столбце (высота столбца) должно соответствовать количеству выпадений каждой из сторон игральной кости.
Примеры
import displayHistogram from '../histogram.js'; displayHistogram(32, rollDie); // => 28% // ### // ### // 19% ### // ### 16% ### 16% // 13% ### ### ### ### // ### 9% ### ### ### ### // ### ### ### ### ### ### // ### ### ### ### ### ### // ### ### ### ### ### ### // ----------------------- // 1 2 3 4 5 6 displayHistogram(13, rollDie); // => 31% 31% // ### ### // 15% 15% ### ### // ### 8% ### ### ### // ### ### ### ### ### // ----------------------- // 1 2 3 4 5 6
Подсказки:
- Гистограмма.
- Для решения задачи активно используйте функции из библиотеки lodash.
- При получении процентного значения используйте стандартные правила округления числа.
Успешных завершений: 67%
dictionary.js
Реализуйте и экспортируйте по умолчанию функцию, которая объединяет несколько словарей (объектов) в один общий словарь. Функция принимает любое количество аргументов и возвращает результат в виде объекта, в котором каждый ключ содержит массив уникальных значений. Элементы в массиве располагаются в том порядке, в котором они появляются во входящих словарях.
Примеры
merge({}, {}, {}); // {} merge({ a: 1, b: 2 }, { a: 3 }); // { a: [1, 3], b: [2] } merge( { a: 1, b: 2, c: 3 }, {}, { a: 3, b: 2, d: 5 }, { a: 6 }, { b: 4, c: 3, d: 2 }, { e: 9 }, ); // { a: [1, 3, 6], b: [2, 4], c: [3], d: [5, 2], e: [9] }
Успешных завершений: 86%
solution.js
Реализуйте и экспортируйте по умолчанию функцию, которая выводит на экран столбчатую диаграмму. Функция принимает в качестве параметра последовательность чисел, длина которой равна количеству столбцов диаграммы. Размер диаграммы по вертикали должен определяться входными данными.
Примеры
import barChart from '../solution.js'; barChart([5, 10, -5, -3, 7]); // => * // * // * // * * // * * // ** * // ** * // ** * // ** * // ** * // ## // ## // ## // # // # barChart([5, -2, 10, 6, 1, 2, 6, 4, 8, 1, -1, 7, 3, -5, 5]); // => * // * // * * // * * * // ** * * * // * ** * * * * // * ** *** * * // * ** *** ** * // * ** **** ** * // * ******** ** * // # # # // # # // # // # // #
Подсказки:
- Для решения задачи активно используйте функции из библиотеки lodash.
Успешных завершений: 74%
Это усложненная версия испытания Морской бой.
solution.js
Реализуйте и экспортируйте по умолчанию функцию, которая принимает на вход поле боя в виде квадратного двумерного массива из нулей и единиц. Ноль — пустая ячейка, единица — часть корабля. Функция должна вернуть количество кораблей на поле боя.
В отличии от классической игры "Морской бой", в данном варианте корабли могут изгибаться.
Примеры
calcShipsCount([]); // 0 calcShipsCount([ [0, 1, 0, 0, 0, 0], [0, 1, 0, 0, 0, 1], [0, 0, 0, 1, 0, 0], [0, 1, 1, 1, 0, 1], [0, 0, 0, 0, 0, 1], [1, 1, 0, 1, 0, 0], ]); // 6
Подсказки
- При необходимости используйте функции из библиотеки lodash
Успешных завершений: 72%
users.js
Реализуйте и экспортируйте по умолчанию функцию, которая принимает список пользователей и возвращает объект, где ключ - это год рождения, а значение - это количество мужчин, родившихся в этот год.
Примеры
const users = [ { name: 'Bronn', gender: 'male', birthday: '1973-03-23' }, { name: 'Reigar', gender: 'male', birthday: '1973-11-03' }, { name: 'Eiegon', gender: 'male', birthday: '1963-11-03' }, { name: 'Sansa', gender: 'female', birthday: '2012-11-03' }, { name: 'Jon', gender: 'male', birthday: '1980-11-03' }, { name: 'Robb', gender: 'male', birthday: '1980-05-14' }, { name: 'Tisha', gender: 'female', birthday: '2012-11-03' }, { name: 'Rick', gender: 'male', birthday: '2012-11-03' }, { name: 'Joffrey', gender: 'male', birthday: '1999-11-03' }, { name: 'Edd', gender: 'male', birthday: '1973-11-03' }, ]; getMenCountByYear(users); // { // 1973: 3, // 1963: 1, // 1980: 2, // 2012: 1, // 1999: 1, // };
Подсказки
- Для извлечения года из даты используйте метод slice
Успешных завершений: 95%