Everything tagged why (1 post)

JavaScript FizzBuzz in a tweet

The FizzBuzz challenge has been around a while but I stumbled across it again after reading another unique Giles Bowkett post.

If you're not familiar with FizzBuzz, it's a little 'challenge' designed to test a candidate programmer's ability to perform a simple task. In this case, you just have to print out the numbers from 1 to 100, unless the number is a multiple of 3, when you should instead print "Fizz", 5 in which case you print "Buzz", or both 3 and 5 in which case you print "FizzBuzz".

Here's a trivial JavaScript implementation:

for (var i=1; i <= 100; i++) {
if (i % 3 == 0) {
if (i % 5 == 0) {
console.log('FizzBuzz');
} else {
console.log('Fizz');
}
} else if (i % 5 == 0) {
console.log('Buzz');
} else {
console.log(i);
}
};
for (var i=1; i <= 100; i++) {
if (i % 3 == 0) {
if (i % 5 == 0) {
console.log('FizzBuzz');
} else {
console.log('Fizz');
}
} else if (i % 5 == 0) {
console.log('Buzz');
} else {
console.log(i);
}
};

Pretty simple stuff, but a bit verbose. I wanted something that would fit into a tweet. It turns out that's pretty simple - this is 133 characters including whitespace, 7 within tolerance for a twitter message:

for (var i = 1; i <= 100; i++) {
var f = i % 3 == 0, b = i % 5 == 0;
console.log(f ? b ? "FizzBuzz" : "Fizz" : b ? "Buzz" : i);
}
for (var i = 1; i <= 100; i++) {
var f = i % 3 == 0, b = i % 5 == 0;
console.log(f ? b ? "FizzBuzz" : "Fizz" : b ? "Buzz" : i);
}

Which of course begs the question - just how short can a JavaScript FizzBuzz implementation be? Here's my baseline, which is a tortured and contorted version of the above:

for(i=1;i<101;i++){console.log(i%3?i%5?i:"Buzz":i%5?"Fizz":"FizzBuzz")}
for(i=1;i<101;i++){console.log(i%3?i%5?i:"Buzz":i%5?"Fizz":"FizzBuzz")}

The above is 71 characters - I expect you to do better. The rules are that the only dependency is Firebug's console.log being available, and you can't replace 'console.log' for anything else.

Of course, if we did swap 'console.log' for 'alert', the whole thing would fit in a tweet twice, but that would be damn annoying.

Hint: you can take at least three more characters off the above - can you see how?

Continue reading