Skip to content

Instantly share code, notes, and snippets.

@dvberkel
Last active August 29, 2015 14:20
Show Gist options
  • Save dvberkel/8e3064a041397bdda4e0 to your computer and use it in GitHub Desktop.
Save dvberkel/8e3064a041397bdda4e0 to your computer and use it in GitHub Desktop.
Reflections on five programming problems every Software Engineer should be able to solve in less than 1 hour
(function problem1(){
var list = [1, 2, 3, 4, 5]; // sum is 15
function sumFor(aList) {
var sum = 0;
for (var index = 0; index < aList.length; index++) {
sum += aList[index];
}
return sum;
}
function sumWhile(aList) {
var sum = 0, index = 0;
while (index < aList.length) {
sum += aList[index++];
}
return sum;
}
function sumRecursion(aList) {
if (aList.length == 0){
return 0;
} else {
return aList[0] + sumRecursion(aList.slice(1));
}
}
function sumReduce(aList) {
return aList.reduce(function(acc, el){ return acc + el}, 0);
}
console.log(sumFor(list));
console.log(sumWhile(list));
console.log(sumRecursion(list));
console.log(sumReduce(list));
})();
(function problem2(){
function zip(as, bs){
var result = [], index = 0;
while (index < as.length && index < bs.length) {
result.push(as[index]);
result.push(bs[index]);
index++;
}
return result;
};
console.log(zip(['a','b','c'], [1, 2, 3]));
})();
(function problem3(){
function fibonacci(n){
var result = [];
var a = 0, b = 1;
while (n > 0) {
result.push(a);
var tmp = a;
a = b;
b = tmp + a;
n--;
}
return result;
};
console.log(fibonacci(100));
})();
(function problem4(){
function significateDigit(n) {
return parseInt(("" + n).split("")[0]);
}
function decreasing(a, b) {
return significateDigit(b) - significateDigit(a);
}
function toString(element) {
return "" + element;
}
function concat(accumalator, element){
return accumalator + element;
}
function largestNumber(aList){
return parseInt(aList.sort(decreasing).map(toString).reduce(concat));
};
console.log(largestNumber([50, 2, 1, 9]));
})();
(function problem5(){
var options = ["-", "", "+"];
function multiOptions(n) {
if (n == 0) {
return [[]];
} else {
var result = [];
multiOptions(n - 1).forEach(function(candidate){
console.log()
options.forEach(function(option){
var copy = candidate.slice(0);
copy.push(option);
result.push(copy);
});
});
return result;
}
};
function zip(as, bs){
var result = [], index = 0;
while (index < as.length && index < bs.length) {
result.push(as[index]);
result.push(bs[index]);
index++;
}
return result;
};
function expression(candidate) {
var numbers = candidate.map(function(_, index){ return index + 1});
var expr = zip(numbers, candidate).reduce(function(acc, element){
return acc + element;
}) + (numbers[numbers.length - 1] + 1);
return expr;
}
console.log(multiOptions(8)
.map(expression)
.map(function(expr){
return [expr, eval(expr)];
})
.filter(function(tuple){
return tuple[1] == 100
})
.map(function(tuple){
return tuple[0];
}));
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment