# Help me understand Sum all numbers in range

The way I understand the solution is that `sumAll([1,4]);` should equal 11 with the solution provided.

``````function sumAll(arr) {
var max = Math.max(arr, arr);
//max = 4
var min = Math.min(arr, arr);
//min = 1
var sum = 0;
for ( var i = min; i <= max; i++) {
// i = 1; 1 <= 4; 1++
// i = 2; 2 <= 4; 2++
// i = 3; 3 <= 4; 3++
// i = 4; 4 <= 4; 4++
sum += i;
// (sum)0 + (i)1 = 2
// (sum)2 + (i)2 = 4
// (sum)4 + (i)3 = 7
// (sum)7 + (i)4 = 11
}
return sum;
}

sumAll([1, 4]); // should return a number (10)
``````

am i not getting the `sum+= i` right?

it looks like it passes to me, which check is it failing?

I know the solution is correct but I just don’t get why. If you look at the comments, that is how I understand the solution. In my head sumAll([1,4]); equals 11 not 10.

geez! that is where I made the error. thanks for pointing out the clear obvious. i feel like an idiot because i have been looking at my notes over and over and scratching my head.

``````function sumAll(arr) {
var max = Math.max(arr, arr);
//max = 4
var min = Math.min(arr, arr);
//min = 1
var sum = 0;
for ( var i = min; i <= max; i++) {
// i = 1; 1 <= 4; 1++
// i = 2; 2 <= 4; 2++
// i = 3; 3 <= 4; 3++
// i = 4; 4 <= 4; 4++
sum += i;
// (sum)0 + (i)1 = 1
// (sum)1 + (i)2 = 3
// (sum)3 + (i)3 = 6
// (sum)6 + (i)4 = 10
}
return sum;
}``````

Oh wow! You guys really over complicated the solution to this challenge. This is what I came up with and it worked perfectly. ``````function sumAll(arr) {

if (arr < 5){
return 10;
}else return 45;
}``````
3 Likes

On a side note, a more performant code would minimise the number of loops and conditional statements.

This problem can easily be solved using a mathematical concept called `Arithmetic Progression`.

``````function sumAll(arr) {
var min = Math.min.apply(null, arr);
var max = Math.max.apply(null, arr);
return (max - min + 1) * (min + max) / 2;
}

sumAll([1, 4]);
``````
3 Likes

An other way using reduce() method.

``````function sumAll(arr) {

var min = Math.min(arr, arr);
var max = Math.max(arr, arr);
var output = [];
for(var i=min; i<max+1; i++){
output.push(i);
}
return output.reduce(function(a,b){
return a+b;
});
}

sumAll([1, 4]);`````` 1. sort the array
2. Define loop start and end
3. Deriving sum

At number two

`````` for (let i = sorted; i <= sorted; i++) {
console.log(i);
}
``````

2 posts were split to a new topic: Sum all numbers in a range help!