Test job for Auriga
Description:
- Реализовать once – функцию, которая принимает другую функцию, в качестве аргумента, и возвращает новую версию этой функции.
Новая версия должна возвращать то же, что и оригинальная функция, но все последующие вызовы должны возвращать результат самого первого вызова.
Пример:
let inc = a => a + 1;
let incOnce = once(inc);
let res1 = incOnce(42); //res1 is 43
let res2 = incOnce(77); //res2 is 43, NOT 78
Требования:
- Не допустимы повторные вызовы функции-аргумента 2. Функция once должна корректно работать с функциями нескольких аргументов 3. Функция once должна корректно работать с методами 4. Функция once должна корректно работать с функциями, которые кидают исключения. В таких случаях, новая функция должна выбрасывать одно и то же исключение при всех последующих вызовах.
- Реализовать функцию, которая принимает два аргумента: arr(массив чисел) и countMax(число).
Функция должна возвращать массив длиной countMax (отсортированный по возрастанию) из наибольших чисел массива arr.
Одинаковые значения учитываются только 1 раз.
Если в массиве меньше уникальных числовых значений чем countMax, функцию должна кинуть исключение.
Пример:
let inputArr = [40, 20, 30, 20, 10, 10, 40]; let yourFunction = (arr, countMax) => {
//Implementation here
}
//get 3 maximum values
let res1 = yourFunction(inputArr, 3); //res1 is [20, 30, 40]; try {
//get 10 maximum values
let res2 = yourFunction(inputArr, 10); } catch (err) {
//err is like “Incorrect value for argument countMax”
}