Skip to content

Instantly share code, notes, and snippets.

@spilledmilk
Last active May 20, 2016 19:14
Show Gist options
  • Save spilledmilk/7ae05a15eaa843c645af7a55a933ac50 to your computer and use it in GitHub Desktop.
Save spilledmilk/7ae05a15eaa843c645af7a55a933ac50 to your computer and use it in GitHub Desktop.
[Devschool] javascript coding challenges
// Considering terms in Fibonnaci sequence
// whose values don't exceed 4 million
// find sum of the even-valued terms
module.exports = (function() {
var fibonacci = function(num) {
if (num <= 1) {
return num;
} else {
return fibonacci(num - 1) + fibonacci(num - 2);
}
};
var fibonacciList = function(fn, num) {
var list = [];
for(var i = 1; i <= num; i++) {
list.push(fn(i));
}
return list;
};
var evenNums = function(ary) {
return ary.filter(function(num) { return num % 2 === 0 });
};
var sum = function(numsAry) {
// es6 version return numsAry.reduce((prev, curr) => prev + curr);
return numsAry.reduce(function(acc, num) { return acc + num });
};
var sumEvenFibonacciNums = function(num) {
return sum(evenNums(fibonacciList(fibonacci, num)));
};
return {
call: sumEvenFibonacciNums
};
}());
// Considering terms in Fibonnaci sequence
// whose values don't exceed 4 million
// find sum of the even-valued terms
var sumEvenFibonacciNums = (function() {
var fibonacci = function(num) {
if (num <= 1) {
return num;
} else {
return fibonacci(num - 1) + fibonacci(num - 2);
}
};
var fibonacciList = function(fn, num) {
var list = [];
for(var i = 1; i <= num; i++) {
list.push(fn(i));
}
return list;
};
var evenNums = function(ary) {
var evens = [];
ary.filter(function(num) { if (num % 2 === 0) { evens.push(num) }
});
return evens;
};
var sum = function(numsAry) {
return numsAry.reduce((prev, curr) => prev + curr);
};
var sumEvenFibonacciNums = function(num) {
return sum(evenNums(fibonacciList(fibonacci, num)));
};
return {
call: sumEvenFibonacciNums
};
}());
console.log(sumEvenFibonacciNums.call(10));
  var fibonacciList = function(fn, num) {
    var list = [];
    for(var i = 1; i <= num; i++) {
      list.push(fn(i));
    }

    return list;
  };
  • mutability is all inside the function
  var evenNums = function(ary) {
    return ary.filter(function(num) { return num % 2 === 0 });
  };

vs

  var evenNums = function(ary) {
    var evens = [];
    ary.filter(function(num) { if (num % 2 === 0) { evens.push(num) }
    });

    return evens;
  };

They both produce the same outcome.

If I were to pass in an array, say [1,2,3,4,5,6], both would return [2,4,6]

The revised is functional programming, and a much better way to solve the same problem the original snippet is trying to solve.

The filter essentially is for what the "if (num % 2 === 0) { evens.push(num) }" does.

The revised returns an immutable version and it just returns the values that meet the requirements of the filter, versus the original, a mutable version where items are being added to an array.

In the original one, the var evens = []; is a side effect, in that a variable is being created and changing it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment