Interview Questions

Oddball sum
The practice coding question created by App Academy:
Write a function called oddball_sum which takes in a list of numbers and returns the sum of all the odd elements.
To solve this challenge we'll simply loop through the array while maintaining a final count, and every time an odd number is encountered we'll add it to the count.

## Code

```function oddball_sum(nums) {

// final count of all odd numbers added up
var final_count = 0;

// loop through entire list
for (var i = 0; i < nums.length; i++) {

// we divide by 2, and if there is a remainder then
// the number must be odd so we add it to final_count
if (nums[i] % 2 === 1) {
final_count += nums[i]
}

}

return final_count;

}

oddball_sum([1, 2, 3, 4, 5]);
```
```def oddball_sum(nums):

# final count of all odd numbers added up
final_count = 0

# loop through entire list
for i in xrange(0, len(nums)):

# we divide by 2, and if there is a remainder then
# the number must be odd so we add it to final_count
if nums[i] % 2 == 1:
final_count += nums[i]

return final_count

print oddball_sum([1, 2, 3, 4, 5])
```
mrdaniel published this on 1/31/16 |
• +
• 5
• -
• @thedragon That's actually more abstract, which makes it more dificult for someone learning JavaScript to grasp the concepts of iteration. In your example you're introducing: built-in methods, higher-order functions/callbacks, scoping, and the introduction of a call stack (via reduce). So, no. That's not simpler for a beginner. It's probably the route I'd take in solving the problem, but it's not how I'd teach a beginner about iteration and conditional checking. Also, it's not any faster as both solutions run in a linear time complexity.
• +
• 2
• -
• Why don't you use reduce? Isn't this simpler? ``` function oddball_sum(nums) { return nums.reduce(function(total, item){ if (item % 2 === 1) { return total += item; } return total; }); } ```
• +
• 0
• -
• Using Numpy: ``` import numpy as np def oddball_sum(arr): return np.sum(arr[np.arange(1, arr.shape[0], 2)]) ```
• +
• 0
• -
• Correct! ``` function oddball_sum(list) { return list .filter((number) => number % 2 === 1) .reduce((a, b) => a + b, 0); } ```
• +
• 0
• -
• I agree with @richardjboothe. @thedragon - your code doesn't seem to take into account if the first element in the array is not an odd number. Will work with [1, 2, 3, 4, 5], but not with [2, 3, 4, 5].
• +
• 0
• -
• more readble ``` function oddball_sum(list) { return list .filter((number) => number % 2 === 0) .reduce((a, b) => a + b, 0); } ```