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

```#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; ```
```} ```