Codementor Events

Swift Algorithm Part 1: Fizz Buzz Test Solution

Published Jan 31, 2017Last updated Jul 27, 2017
Swift Algorithm Part 1: Fizz Buzz Test Solution

Hello, what's up guys!

Welcome to the new series of articles called Swift Algorithm.
For those of you that are new to programming in Swift and those of you coming from different programming bases,
such as Python or Java, this article should be quite helpful.
In this post, we will discuss a simple solution for implementing swift algorithms.

Fizz Buzz

You may have seen Fizz Buzz written as Fizz Buzz, FizzBuzz, or Fizz-Buzz; they're all refering to the same thing. That "thing" is the main topic of discussion today. First, what is FizzBuzz?

This is a common question that comes up in job interviews.

Imagine a series of number from 1 to 10.

1 2 3 4 5 6 7 8 9 10

Fizz and Buzz refer to any number that's a multiple of 3 and 5 respectively. In other words, if a number is divisible by 3, it is substituted with fizz; if a number is divisible by 5, it is substituted with buzz. If a number is simultaneously a multiple of 3 AND 5, the number is replaced with "fizz buzz." In essence, it emulates the famous children game "fizz buzz".

To work on this problem, open up Xcode to create a new playground and initialize an array like below:

//for example 
let number  = [1,2,3,4,5]
//here 3 is fizz and 5 is buzz

To find all the fizz and buzz, we must iterate through the array and check which numbers are fizz and which are buzz. To do this, create a for loop to iterate through the array we have initialised:

for num in number {
//Body and calculation goes here
}

After this, we can simply use the "if else" condition and module operator in swift ie - % to locate the fizz and buzz

for num in number {
if num % 3 == 0 {
     print("\(num) fizz")
 }
else {
     print(num)
 }
}

Great! You can go to the debug console in Xcode playground to see the output. You will find that the "fizzes" have been sorted out in your array.

For the Buzz part, we will use the same technique. Let's give it a try before scrolling through the article — you can check your results against this article once you've finished doing this.

for num in number {
if num % 3 == 0 {
            print("\(num) fizz")
         } 
else if num % 5 == 0 {
           print("\(num) buzz")
         }
else {
           print(num)
        }
}

Check the output!

It's rather straight forward — you divided the number by 3, fizz and divided the number by 5, buzz.
Now, increase the numbers in the array

let number = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

We increased the range of numbers from 1-10 to 1-15 in order to demonstrate the concept of a "fizz buzz." Since 15 is a multiple of both 3 and 5, the number should be replaced with "fizz buzz."
Try for yourself and check the answer!

Here is the solution:

for num in number {
      if num%3 == 0 && num%5 == 0{
               print("\(num) fizz buzz")
              }
                else if num % 3 == 0 {
                 print("\(num) fizz")
              } 
                 else if num % 5 == 0 {
                 print("\(num) buzz")
              }
                else {
                    print(num)
                        }
                   }

Wait...it's not over though! The whole purpose of the algorithm is to customize the runtime correctly. Imagine if the range increases from 1-15 to 1-100. The compiler will check each number to determine whether it is divisible by 3 or 5. It would then run through the numbers again to check if the numbers are divisible by 3 and 5. The code would essentially have to run through each number in the array twice — it would have to runs the numbers by 3 first and then run it by 5. To speed up the process, we can simply tell our code to divide the numbers by 15 directly.

Here is the final code:

     for num in number {
      if num%15 == 0{
               print("\(num) fizz buzz")
              }
                else if num % 3 == 0 {
                 print("\(num) fizz")
              } 
                 else if num % 5 == 0 {
                 print("\(num) buzz")
              }
                else {
                    print(num)
                        }
                   }

What else can we do? Enalrge the range of your array again and create array of 1000 numbers and check if your code is correct! If you discover any issues with my codes or have any additional questions, please comment below. You can also download the full code from this link:

Download the code.

Hope you enjoyed this session. In the next post, we will learn about binary searches and linear searches.

Thank You 😃

Discover and read more posts from Abdul Karim
get started
post commentsBe the first to share your opinion
Gopinatha
5 years ago
(0...100).forEach { (num) in

  switch num {
  case let x where x.isMultiple(of: 15):
    print("\(num): FizBizz")
  case let x where x.isMultiple(of: 3):
    print("\(num): Fiz")
  case let x where x.isMultiple(of: 5):
    print("\(num): Bizz")
  default:
    print(num)
  }
}
Soham BISHNOI
6 years ago

a simpler one is as follows .

for i in 0…100{

if i%15 == 0 {
    print("fizzbuzz")
}
    
else if i%3 == 0{
    print("fizz")
}
else if i%5 == 0 {
    print("buzz")
}
print(i)

}

Mymy
7 years ago

The link does not work to download to help check my results.

Abdul Karim
7 years ago

link update download and check . happy coding :)

Mymy
7 years ago

Thank you kindly. I wish you could teach with videos, swift for non programmers the beginning! Learning a language with no prior knowledge. and no one explains anything they just say do this and not that which for the laymen makes it difficult to understand at the start and just gets worse as you go along. But with your help this is the first thing I got and understood. I actually did it right. Thank you ever so much. Please let me know if you decide to do a video.

Show more replies