FizzBuzz Test
Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.
—c2.com
Here’s my solution:
Test Driven Development Approach
// TDD Readable
var getFizzBuzzStatements = function (len) {
var arr = [],
str = "";
for (var i = 1; i <= len; i++) {
str = (i % 3) ? "" : "Fizz";
str += (i % 5) ? "" : "Buzz";
arr.push(str||i);
}
return arr;
};
var fizzBuzz = function () {
console.log(getFizzBuzzStatements(100).join("\n"));
};
fizzBuzz(); |
// TDD Readable
var getFizzBuzzStatements = function (len) {
var arr = [],
str = "";
for (var i = 1; i <= len; i++) {
str = (i % 3) ? "" : "Fizz";
str += (i % 5) ? "" : "Buzz";
arr.push(str||i);
}
return arr;
};
var fizzBuzz = function () {
console.log(getFizzBuzzStatements(100).join("\n"));
};
fizzBuzz();
Alternative: One liner
// One liner
for (i = 1; i <= 100; i++)
console.log((((i % 3) ? "" : "Fizz") + (i % 5 ? "" : "Buzz")||i) + "\n") |
// One liner
for (i = 1; i <= 100; i++)
console.log((((i % 3) ? "" : "Fizz") + (i % 5 ? "" : "Buzz")||i) + "\n")
Alternative: Switches
var getFizzBuzzStatements = function (len) {
var j,
arr = [];
for (var i = 1; i <= len; i++) {
switch (i % 15) {
case 0:
arr.push("FizzBuzz");
break;
case 3: case 6: case 9: case 12:
arr.push("Fizz");
break;
case 5: case 10:
arr.push("Buzz");
break;
default:
arr.push(i);
}
}
return arr;
};
var fizzBuzz = function () {
console.log(getFizzBuzzStatements(100).join("\n"));
}; |
var getFizzBuzzStatements = function (len) {
var j,
arr = [];
for (var i = 1; i <= len; i++) {
switch (i % 15) {
case 0:
arr.push("FizzBuzz");
break;
case 3: case 6: case 9: case 12:
arr.push("Fizz");
break;
case 5: case 10:
arr.push("Buzz");
break;
default:
arr.push(i);
}
}
return arr;
};
var fizzBuzz = function () {
console.log(getFizzBuzzStatements(100).join("\n"));
};
Demo