Проблем с решението на Below and Above Average

arrays

#1

Здравейте,

Зациклих на следната задача от Workshop Arrays - Below and Above Average
Прилагам моя код:

const getGets = (arr) => {
    let index = 0;

    return () => {
        const toReturn = arr[index];
        index += 1;
        return toReturn;
    };
};
// this is the test
const test = [
    '3,-12,0,0,13,5,1,0,-2'
];

const gets = this.gets || getGets(test);
const print = this.print || console.log;

const nums = gets().split(',').map(Number);
const below = [];
const above = [];
let sum = 0;

for (let i = 0; i < nums.length; i++) {
    sum += nums[i];
}

let avr = sum / nums.length;

for (let i = 0; i < nums.length; i++) {
    if (nums[i] < avr) {
        below.push(i);
    } else {
        above.push(i);
    }
}

print('avg: ' + avr.toFixed(2));
print('below: ' + below);
print('above: ' + above);

Очаквания output е:
avg: 0.89
below: -12,0,0,0,-2
above: 3,13,5,1

Но резултата за съжаление при мен е:
avg: 0.89
below: 1,2,3,7,8
above: 0,4,5,6

Прегледах няколко пъти кода и не мога да си намеря грешката.


#2

Привет,
Акумулирате индексите, не стойностите :slight_smile: , време е за почивка
below.push(i); -> below.push(nums[i])
} else {
above.push(i); -> …


#3

Благодаря, вярно си е време за почивка :joy:


#4

E тук вече се обърках тотално преди почивката…

watelerik1

Edit: Видях от къде поне идва грешката:

При 0,1,-1 - очакван output:
avg: 0.00
below: -1
above: 1

А при мен излиза:
avg: 0.00
below: -1
above: 0,1

Грешката идва от това, че слага ‘0’ при above

Edit 2: Реално трябваше да сложа условие, ако nums[i] == avr, да го пропусне:

const nums = gets().split(',').map(Number);
const below = [];
const above = [];
let sum = 0;

for (let i = 0; i < nums.length; i++) {
    sum += nums[i];
}

let avr = sum / nums.length;

for (let i = 0; i < nums.length; i++) {
    if (nums[i] < avr) {
        below.push(nums[i]);
    } else if (nums[i] == avr) {
        continue;
    } else {
        above.push(nums[i]);
    }
}

print('avg: ' + avr.toFixed(2));
print('below: ' + below);
print('above: ' + above);