The FizzBuzz Problem!
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
— Andrejs Dunkels
Introduction
The FizzBuzz problem is a very popular problem given by interviewers to programmers. The problem is to print numbers 1 to N, return “Fizz” for every number that is a multiple of 3, “Buzz” for every number that is a multiple of 5 and “FizzBuzz” for every number that is a multiple of 3 and 5. The problem might look easy but it is used to test a programmers coding habit. In this post, I am going to create a function that performs the above task using the for loop and functional approach.
Using For Loop
FizzBuzz <- function(n){ x <- vector("double", n) for(i in 1:n){ x[i] <- i if(i%%3 == 0 & i%%5 == 0 ){ x[i] = "FizzBuzz" } else if(i%%3 == 0){ x[i] = "Fizz" } else if(i%%5 == 0) x[i] = "Buzz" } print(x) }
The function contains three conditions inside a for loop, the first condition takes a number and see if it is divisible by 3 and 5 to return “FizzBuzz” if this condition is not met, it goes to the second condition and see if the number is divisible by 3 and return “Fizz” also if this is not me, the third condition returns “Buzz” if the number is divisible by 5. If all these functions are not met, the function prints the number. Modular division %%
is used to see if the remainder is equal to zero or not.
FizzBuzz(20) ## [1] "1" "2" "Fizz" "4" "Buzz" "Fizz" ## [7] "7" "8" "Fizz" "Buzz" "11" "Fizz" ## [13] "13" "14" "FizzBuzz" "16" "17" "Fizz" ## [19] "19" "Buzz"
Using functionals
FizzBuzz_2 <- function(n){ x <- seq(from = 1, to = n, by = 1) fizz_buzz <- function(x){ if(x%%3 == 0 & x%%5 == 0){ print("FizzBuzz") } else if(x%%3 == 0){ print("Fizz") } else if(x%%5 == 0){ print("Buzz") } else(print(x)) } fizzbuzz_return <- sapply(x, fizz_buzz)[0] print(fizzbuzz_return) }
In the function, a sequence of vector-matrix x
is created from 1 to n
using seq()
. Then a function with similar conditions as to the function in the for loop is created taking the vector of values x
as input. sapply()
is used to return the result of the function on the vector x
.
FizzBuzz_2(20) ## [1] 1 ## [1] 2 ## [1] "Fizz" ## [1] 4 ## [1] "Buzz" ## [1] "Fizz" ## [1] 7 ## [1] 8 ## [1] "Fizz" ## [1] "Buzz" ## [1] 11 ## [1] "Fizz" ## [1] 13 ## [1] 14 ## [1] "FizzBuzz" ## [1] 16 ## [1] 17 ## [1] "Fizz" ## [1] 19 ## [1] "Buzz" ## character(0)
Conclusion
Unlike other programming languages, most problems can be solved in R without using loops. This is known as vectorization and is the basis on which most R functions are built. This makes code look elegant, fast and easy to debug. That is all for this post, thanks for reading.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.