Положим, одна переменная, которую можно использовать, - это не сами входные данные, а данные заданы в массиве или передаются в функцию, не суть важно. Есть 5 счётчиков, а по факту, можно обойтись тремя - положительные, чётные, и нули, а остальные вывести простым вычитанием. Каждый из счетчиков принимает значения от 0 до 10, значит, для каждого выделяем 4 бита - это 12 бит.
let counters = 0b000000000000;
Условимся, что счетчик положительных лежит в младших битах, четных - в средних, нулей - в старших, а сам массив входных данных называется numbers
.
Поскольку по условию задачи размер массива известен, мы можем пройтись циклом while, убирая из него очередной элемент на каждой итерации. Цикл принимает вид
while (numbers.length) {
//...
numbers.shift()
}
Теперь разберёмся с телом цикла.
Проверка на положительность
if (numbers[0] > 0) {
counters += 1 << 0;
}
На чётность
if (numbers[0] & 1 === 0) {
counters += 1 << 4;
}
На ноль
if (numbers[0] === 0) {
counters += 1 << 8;
}
Теперь вывод, используя сдвиги и битовые маски
console.log('Положительных', (counters >> 0) & 0b1111);
console.log('Нулей', (counters >> 8) & 0b1111);
console.log('Отрицательных', 10 - (counters >> 0) & 0b1111 - (counters >> 8) & 0b1111);
console.log('Чётных', (counters >> 4) & 0b1111);
console.log('Нечётных', 10 - (counters >> 4) & 0b1111);