Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I just got thrown the FizzBuzz test a couple days ago. First time I had ever seen it. Startled me that everyone else knows what it is too! I don't know if it would be blindingly obvious without the mod operator.


Let's see: x / y * y == x iff x % y == 0, if your language handles integer division like most do.

If your language doesn't do integer division that way, the naive approach is even easier if you know how to round: x / y == round(x / y) iff x % y == 0.

There are many, many other approaches which will work, too. I saw one guy hand-build an array of ints, initialize to zero, loop over it once with arr[i++] = 0; arr[i++] = 0; arr[i++] = 3 to set the multiples of 3, then do the same thing with the fives except checking to see if there was already a 3 there, then looping over the array a fourth time to handle the actual printing.

That is the kind of competent, worksmanlike programming that runs the world while the can't-do-FizzBuzz guys are hopefully not touching the code too much.


I would consider the mod operator to be pretty basic though. (Feel free to call me out if I'm just being naive.)

Outside of the mod operator, you could always use a combo of floor() and ceiling() (which I assume most languages have in a standard library). e.g.:

  from math import floor,ceil
  def divisible_by_3(n):
    result = n / 3.0
    return ceil(result) == floor(result)
Or even more basic:

  def divisible_by_3(n):
    result = n / 3.0
    return int(result) == result


The main danger with using the mod operator is that you can get an off-by-one if you aren't in the habit of using it and forget the exact definition. If that's in doubt, rolling your own thing with a division or a while/if makes for a stronger guarantee of success on the first try.

In an interview you could explain your reasoning for such a detour as well, which might work out better than just "knowing the answer."


I used the old int(i) == i (or even, int(i/2) == i/2) way before I knew about the mod operator.


    var s = require('sys');
    for (var i = 1; i < 101; i++) {
      if (i%3 == 0 && i%5 == 0) s.puts('fizzbuzz');
      else if (i%3 == 0) s.puts('fizz');
      else if (i%5 == 0) s.puts('buzz');
      else s.puts(i);
    }

    node.fizzbuzz.js




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: