Skip to content

Instantly share code, notes, and snippets.

@1995eaton
Created August 15, 2014 23:05
Show Gist options
  • Save 1995eaton/2372983c9f69cb05c99b to your computer and use it in GitHub Desktop.
Save 1995eaton/2372983c9f69cb05c99b to your computer and use it in GitHub Desktop.
FizzBuzz Benchmarks
var FizzBuzz = {
'switch': function(N) {
var result = [];
for (var i = 1; i <= N; i++) {
switch (i % 15) {
case 0:
result.push('FizzBuzz');
break;
case 3:
case 6:
case 9:
case 12:
result.push('Fizz');
break;
case 5:
case 10:
result.push('Buzz');
break;
default:
result.push(i);
}
}
return result;
},
'concat': function(N) {
var result = [];
for (var i = 1; i <= N; i++) {
var entry = '';
if (i % 3 === 0) {
entry += 'Fizz';
}
if (i % 5 === 0) {
entry += 'Buzz';
}
result.push(entry || i);
}
return result;
},
'mod': function(N) {
var result = [];
for (var i = 1; i <= N; i++) {
if (i % 15 === 0) {
result.push('FizzBuzz');
} else if (i % 3 === 0) {
result.push('Fizz');
} else if (i % 5 === 0) {
result.push('Buzz');
} else {
result.push(i);
}
}
return result;
},
'countdown': function(N) {
var result = [];
for (var i = 1, fizz = 2, buzz = 4; i <= N; i++, fizz--, buzz--) {
if (fizz === 0 && buzz === 0) {
result.push('FizzBuzz');
fizz = 3;
buzz = 5;
} else if (fizz === 0) {
result.push('Fizz');
fizz = 3;
} else if (buzz === 0) {
buzz = 5;
result.push('Buzz');
} else {
result.push(i);
}
}
return result;
},
'bitwise': function(N) {
var result = [];
var acc = 810092048;
var c = 0;
for (var i = 1; i <= N; i++) {
c = acc & 3;
acc = acc >> 2 | c << 28;
if (c === 0) {
result.push(i);
} else if (c === 1) {
result.push('Fizz');
} else if (c === 2) {
result.push('Buzz');
} else {
result.push('FizzBuzz');
}
}
return result;
}
};
var runTests = function(N) {
var padding = new Array(Math.max.apply(null, Object.keys(FizzBuzz).map(function(item) {
return item.length;
}))).join(' ');
for (var method in FizzBuzz) {
var startTime = new Date().getTime();
FizzBuzz[method](N);
console.log('%s: %s%sms', method, padding.slice(method.length - 1), new Date().getTime() - startTime);
}
};
runTests(+process.argv[2] || 10000000);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment