Задачка на codewars, как решить?

Вот линк на задачу. Бьюсь над ней уже дня два и не могу расколоть. Вся боль в том, что задачу нужно решить используя менее 48 символов.
Мои варианты решения, которые не подходят по длине

// вариант 1
checkRange=(a,x,y)=>a.filter(i=>x<=i&i<=y).length
// вариант 2
checkRange=(a,x,y)=>a.reduce((s,i)=>s+(x<=i&i<=y),0)


Второй вариант мне кажется ближе к верному решению, но скорее всего вся соль в методике определения вхождения числа в отрезок. Помогите советом, не могу спать)
  • Вопрос задан
  • 4771 просмотр
Решения вопроса 2
Shemil
@Shemil
checkRange=(a,x,y)=>a.map(b=>n+=b<x==b>y,n=0)|n
checkRange=(a,x,y,c=0)=>a.map(v=>c+=v<x==v>y)|c


Более понятнее
function checkRange(array, x, y, counter = 0) {
  return array.map(item => counter += ((item < x) == (item > y))) | counter
}

checkRange([2, 5, 6, 7, 1, 3, 4, 11, 56, 49],1,7)

где, после итерация
return [1, 2, 3, 4, 5, 6, 7, 7, 7, 7] | 7 // возращает 7
Ответ написан
rockon404
@rockon404
Frontend Developer
Решил:
checkRange=(a,x,y,z=0)=>a.map(e=>z+=e<x==e>y)|z

UPD еще решение:
checkRange=(a,x,y)=>a.map(e=>a.a+=e<x==e>y)|a.a
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Еще в копилку, 50 символов
checkRange=(a,x,y,s=0)=>(a.map(i=>s+=x<=i&i<=y),s)

Мне вот тоже кажется, что вот это выражение x<=i&i<=y нужно сократить.
Ответ написан
@chisler
Кажется, можно так:

checkRange=(a,x,y)=>a.map(i=>i<=y&i>=x).sum()

Символов 45 вместе с именем функции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы