compareEvenAndOddSum

with Carmen Salas • 2024/11/06

Solution

/*
**Problem**
Given an [int] [array],
  - Take the sum of all [ints] in even indices
  - Take the sum of all [ints] in odd indices
Return 'even','odd', or 'equal', depending on the value of the sums.

**Examples/Edge Cases:** 
[1, 2, 3, 4, 5] -> evenIndexSum(1+3+5 == 9) ?? oddIndexSum(2+4 == 6) -> 9 > 6 -> "even"
[1, 1] -> evenIndexSum(1) ?? oddIndexSum(1) -> 1 === 1 -> "equal"

**Data Structures**
- Arrays
- Number

**Algorithm** 
Iterate through all values
  - if value is even, add to sum
  - if value is odd, subtract from sum
Return 'even' if sum is greater than 0
        'odd' if sum is less than 0
      'equal' if sum is 0.
*/

function solution(numbers) {
    // using a regular for loop
    // we can avoid declaring any external variables
    //   by storing the sum at numbers[0].
    
    // iterate through all the numbers in the array
    // we skip the first element (numbers[0])
    //   since that's going to hold our sum
    for (let i = 1; i < numbers.length; i++) {
        // if even add the current value to sum
        if (i%2 === 0) {
          numbers[0] += numbers[i];
        // if odd subtract the current value from sum
        } else {
          numbers[0] -= numbers[i];
        }
    }
    
    // We can determine 'even', 'odd', or 'equal'
    //   just by looking at our sum.
    
    // we also need to cover an empty array!
    //   since constraints tell us that `0 <= numbers.length <= 1000`
    if (numbers[0] === 0 || numbers.length === 0) { return 'equal'; }
    if (numbers[0] < 0) { return 'odd'; }
    if (numbers[0] > 0) { return 'even'; }
    
  // using array methods
  const sum = numbers.reduce((sum, val, index) => {
    return (index%2 === 0) ? sum + val : sum - val;
  }, 0);
  // we can skip the check we did for `numbers.length === 0`
  //   unlike above since `sum = 0` by default, with our .reduce()
  if (sum === 0) { return 'equal'; }
  if (sum < 0) { return 'odd'; }
  if (sum > 0) { return 'even'; }
}

Last updated