Created
August 15, 2014 23:05
-
-
Save 1995eaton/2372983c9f69cb05c99b to your computer and use it in GitHub Desktop.
FizzBuzz Benchmarks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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