Write down a program to solve FizzBuzz problem -This is yet another commonly asked problem in programing interviews. The problem statement is simple – write a program to print numbers from 1 to n except if a no is multiple of 3, then print “Fizz” and if it’s a multiple of five then print “Buzz” instead of numbers. If a number is multiple of both 3 and 5 then print “FizzBuzz“.Here I would show a simple method to do it.
public static List<string> FetchFizzBuzzSeries(int number)
{
List<string> lstFizzBuzz = new List<string>();
string fizz = "Fizz";
string buzz = "Buzz";
string FizzBuzz = "FizzBuzz";
string currentDisplayTerm = string.Empty;
for (int i = 1; i <= number; i++)
{
if ((i % 3 == 0) && (i % 5 == 0))//number divisible by 3 & 5
{
currentDisplayTerm = FizzBuzz;
}
else if (i % 3 == 0)//number divisible by 3
{
currentDisplayTerm = fizz;
}
else if (i % 5 == 0)//number divisible by 5
{
currentDisplayTerm = buzz;
}
else
{
currentDisplayTerm = Convert.ToString(i);
}
lstFizzBuzz.Add(currentDisplayTerm);
}
return lstFizzBuzz;
}
In the function FetchFizzBuzzSeries() a number greater than zero is given as an input. In the function we check if the no is divisible by 3 or 5 and accordingly display the correct term.
The Unit test function(using Nunit) for the code is:
[Test, TestCaseSource(nameof(GetFizzBuzzSeriesTestCases))]
public void Test_FetchFizzBuzzSeries(TestFizzBuzz testData)
{
//Arrange
//Act
var result = Num.FetchFizzBuzzSeries(testData.No);
//Assert
Assert.AreEqual(testData.ExpectedResult, result,
"Fizz Buzz Series has wrong result for the number :" + testData.No);
}
Some of the test scenarios are written in function (GetFizzBuzzSeriesTestCases) as shown below:
private static List<TestFizzBuzz> GetFizzBuzzSeriesTestCases()
{
List<TestFizzBuzz> lstFizBuzzTerms = new List<TestFizzBuzz>();
string fizz = "Fizz";
string buzz = "Buzz";
string FizzBuzz = "FizzBuzz";
string[] fiboSeries = { "1" };
lstFizBuzzTerms.Add(GetFizzBuzzTestData(1, fiboSeries));
fiboSeries = new string[] { "1", "2" };
lstFizBuzzTerms.Add(GetFizzBuzzTestData(2, fiboSeries));
fiboSeries = new string[] { "1", "2", fizz };
lstFizBuzzTerms.Add(GetFizzBuzzTestData(3, fiboSeries));
fiboSeries = new string[] { "1", "2", fizz, "4" };
lstFizBuzzTerms.Add(GetFizzBuzzTestData(4, fiboSeries));
fiboSeries = new string[] { "1", "2", fizz, "4", buzz };
lstFizBuzzTerms.Add(GetFizzBuzzTestData(5, fiboSeries));
fiboSeries = new string[] { "1", "2", fizz, "4", buzz, fizz };
lstFizBuzzTerms.Add(GetFizzBuzzTestData(6, fiboSeries));
fiboSeries = new string[] { "1", "2", fizz, "4", buzz, fizz, "7" };
lstFizBuzzTerms.Add(GetFizzBuzzTestData(7, fiboSeries));
fiboSeries = new string[] { "1", "2", fizz, "4", buzz, fizz, "7", "8" };
lstFizBuzzTerms.Add(GetFizzBuzzTestData(8, fiboSeries));
fiboSeries = new string[] { "1", "2", fizz, "4", buzz, fizz, "7", "8", fizz };
lstFizBuzzTerms.Add(GetFizzBuzzTestData(9, fiboSeries));
fiboSeries = new string[] { "1", "2", fizz, "4", buzz, fizz, "7", "8", fizz, buzz };
lstFizBuzzTerms.Add(GetFizzBuzzTestData(10, fiboSeries));
fiboSeries = new string[] { "1", "2", fizz, "4", buzz, fizz, "7", "8", fizz, buzz, "11", fizz, "13", "14", FizzBuzz };
lstFizBuzzTerms.Add(GetFizzBuzzTestData(15, fiboSeries));
return lstFizBuzzTerms;
}
The source code can be found here :
Note: The project is in .NET 5 .Both the functions can found in Num.cs. Also Have a look into the unit test project(RandomUtilityTest) so that you can get an idea as to how to write better unit tests.
I’d fail this in an interview. The optimal solution uses the common factorization of the terms.
LikeLike