Fizzbuzz

March 23, 2021

I’ve seen several recent posts on the beginning-programmer forums about how to solve the fizzbuzz problem, so let’s talk about that today:

Enumerate the numbers from 1 to N by writing “Fizz” if the number is divisible by 3, “Buzz” if the number is divisible by 5, “FizzBuzz” if the number is divisible by both, and the number itself if the number is divisible by neither. For instance, counting from 1 to 25 works like this: 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11. Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz.

FizzBuzz also appears as the first problem in Project Euler, where they characterize the problem like this:

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000.

Your task is to solve the two versions of the FizzBuzz problem, for all numbers up to N; you can use a simple method, but it is more fun to be a little bit clever. When you are finished, you are welcome to read or run a suggested solution, or to post your own solution or discuss the exercise in the comments below.

Pages: 1 2

8 Responses to “Fizzbuzz”

  1. Pascal Bourguignon said
    (defun fizz-buzz-sum (N)
      (loop for i from 1 below N
            when (or (zerop (mod i 3)) (zerop (mod i 5)))
              sum i))
    
    (mapcar 'fizz-buzz-sum '(10 1000))
    ; --> (23 233168)
    
    (defun fizz-buzz (N)
      (loop for i from 1 below N
            if (zerop (mod i 3))
              if (zerop (mod i 5))
                do (write-line "FizzBuzz")
              else
                do (write-line "Fizz")
              end
            else
              if (zerop (mod i 5))
                do (write-line "Buzz")
              else
                do (format t "~D~%" i)
              end
            end))
    
    (fizz-buzz 20)
    
    1
    2
    Fizz
    4
    Buzz
    Fizz
    7
    8
    Fizz
    Buzz
    11
    Fizz
    13
    14
    FizzBuzz
    16
    17
    Fizz
    19
    
    
  2. Pascal Bourguignon said

    There’s no reason to be clever, otherwise, you end up with something like: https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition ;-)

  3. Daniel said

    Here’s a solution in Python.

    N = 25
    
    for i in range(1, N + 1):
        s = ''
        if i % 3 == 0:
            s += 'Fizz'
        if i % 5 == 0:
            s += 'Buzz'
        if not s:
            s = str(i)
        print(s)
    
    print('----------')
    
    print(sum(x for x in range(1, 1000) if x % 3 == 0 or x % 5 == 0))
    

    Output:

    1
    2
    Fizz
    4
    Buzz
    Fizz
    7
    8
    Fizz
    Buzz
    11
    Fizz
    13
    14
    FizzBuzz
    16
    17
    Fizz
    19
    Buzz
    Fizz
    22
    23
    Fizz
    Buzz
    ----------
    233168
    
  4. Daniel said

    “you can use a simple method, but it is more fun to be a little bit clever”

    Here’s my attempt at a clever solution.

    for i in range(1, 26):
        s = 'Fizz' if not i % 3 else ''
        s += 'Buzz' if not i % 5 else ''
        print(s if s else i)
    
  5. Kevin said

    A solution in Racket:

    (define (fizzbuzz)
      (define dct #hash((0 . FizzBuzz) (6 . Fizz) (10 . Buzz)))
      (for ((n (in-range 1 101)))
        (let ((elr (modulo (expt n 4) 15)))
          (displayln (if (= 1 elr) n (dict-ref dct elr))))))
    
  6. Kevin said

    Another solution in Racket:
    (The first post was for 1 – 100, as requested by Project Euler; this post is for 1 to N.)

    (define (fizzbuzz N)
      (let ((dct #hash((0 . FizzBuzz) (6 . Fizz) (10 . Buzz))) (n-max (add1 N)))
        (for ((n (in-range 1 n-max)))
          (let ((elr (modulo (expt n 4) 15)))
            (displayln (if (= 1 elr) n (dict-ref dct elr)))))))
    

    Example:

    > (fizzbuzz 15)
    1
    2
    Fizz
    4
    Buzz
    Fizz
    7
    8
    Fizz
    Buzz
    11
    Fizz
    13
    14
    FizzBuzz
    
  7. Ernest Gore said

    For the Sum from 1 to N in C#:

    (3(N/3)(N/3 + 1) + 5(N/5)(N/5 + 1) – 15(N/15)(N/15 + 1))/2

  8. faisi said

    my answer in c++

    #include
    using namespace std;
    int main()
    {
    int setc = 0;
    int N = 100;
    for (int i = 1; i < N; i++)
    {
    setc = 0;
    if (i % 3 == 0)
    {
    setc = 1;
    cout << "Fizz";
    }
    if (i % 5 == 0)
    cout << "Buzz";

        else if(setc==0)
            cout << i;
        cout << endl;
    
    
    }
    return 0;
    

    }

Leave a comment