Задача в одну строку: проверка диапазона - CodeWars (с использованием методов JavaScript) - PullRequest
0 голосов
/ 10 октября 2018

Задание

Вам дан массив целых чисел a и два целых числа x и y.Подсчитайте количество элементов в массиве так, чтобы `x ≤ a [i] ≤ y, где i - индекс элемента, основанный на 0.

Предел кода

Менее 48 символов.

Пример

Для a = [2, 5, 6, 7, 1, 3, 4, 11, 56, 49], x = 1 и y = 7, на выходе должно быть 7.

элементы 2, 5, 6, 7, 1, 3, 4 должны быть подсчитаны.

У меня естьустал filter, reduce и не может мыслить каким-либо иным способом, не увеличивая его до 48 символов.

Здесь можно использовать filter

checkRange=(a,x,y)=>a.filter(i=>i>=x&&i<=y).length

Использование reduce

checkRange=(a,x,y)=>a.reduce((c,i)=>i>=x&&i<=y?++c:c,0);

Пример вызова функции

a =[95,92,27,55,55,20,40,8,7,45,87,14,44,35,64,84,95,85,69,47,53,49,95,54,97,7,67,31,76,97,7,24,82,61,10,34,34,85,66,96,65,2,84,4,68,74,46,50]
    x = 64
    y = 76

checkRange(a,x,y) // Expected: 8

На данный момент я получаю более 50+ символов .... и мне нужно уменьшить их до 47.

До сих пор есть некоторые подсказки ...

  • Используйте другой более короткий метод
  • Подсчитайте значения индекса, вместо использования length.
  • Не нужно <= or >=, нужно всего лишь ==

Я получил их от https://www.codewars.com/kata/one-line-task-check-range/discuss/javascript

1 Ответ

0 голосов
/ 10 октября 2018

Этот тест проходит все тесты на Codewars (спасибо @ggorlen за подсказку):

a = [2, 5, 6, 7, 1, 3, 4, 11, 56, 49];
x = 1;
y = 7;
checkRange=(a,x,y)=>a.map(v=>i+=x>v==v>y,i=0)|i;
console.log(checkRange(a,x,y));

Работает путем установки счетчика (i) с использованием параметра thisValue на Array.map, который заменяет все значения в a на счетчиксколько значений проходит тест x>v==v>y (при использовании i+=x>v==v>y - в арифметическом контексте булево значение считается 1 (true) или 0 (false)).Таким образом, для образца массива мы получаем [1,2,3,4,5,6,7,7,7,7] (хотя единственная часть, которая нас действительно интересует, это значение i).Тест вычисляет, являются ли x>v и v>y одинаковыми, что может быть правдой только тогда, когда они оба ложны, что подразумевает x<=v и v<=y, что является нашим желаемым конечным условием.Наконец, |i пытается поразрядно или массив с i, что эквивалентно просто i, так как массив в этом контексте == 0.

...