Programming Praxis


Home | Pages | Archives


Fizzbuzz

March 23, 2021 9:00 AM

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.

Posted by programmingpraxis

Categories: Exercises

Tags:

8 Responses to “Fizzbuzz”

  1. (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
    
    

    By Pascal Bourguignon on March 23, 2021 at 9:14 AM

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

    By Pascal Bourguignon on March 23, 2021 at 9:15 AM

  3. 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
    

    By Daniel on March 23, 2021 at 4:44 PM

  4. “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)
    

    By Daniel on March 23, 2021 at 4:51 PM

  5. 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))))))
    

    By Kevin on March 23, 2021 at 6:03 PM

  6. 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
    

    By Kevin on March 23, 2021 at 6:30 PM

  7. 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

    By Ernest Gore on March 23, 2021 at 11:42 PM

  8. 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;
    

    }

    By faisi on April 6, 2021 at 4:41 PM

Leave a Reply



Mobile Site | Full Site


Get a free blog at WordPress.com Theme: WordPress Mobile Edition by Alex King.