To be honest, this is new to me and stumbled across FizzBuzz being an interview question for Software Engineering positions on a medium post by Valeri Alexiev entitled “A Software Engineering survival guide”. Thought I would attempt to tackle it personally, seeing as I’m currently learning Python.
What is FizzBuzz?
Put simply, a kids game. Imran Ghory came up with a class of developer interview questions based on FizzBuzz, a kids game, where you count from 1-100, however on the multiples of three you call out ‘Fizz’, and on the multiples of five you call out ‘Buzz’ and on a number where its a multiple of both three and five you holla ‘FizzBuzz’.
An example of one of the FizzBuzz questions:
Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”. – Imran Ghory
Overthinking
My attempt at answering the FizzBuzz question above, I thought it best to store it in a list but, in reality, I was over thinking it. In my solution, there is way more I need to explain, can be a little confusing with how I chose to reference the index of the list. My attempt is an example of brute forcing some code to get the job done but doesn’t help moving forwards.
output = list(range(1,101)) # This list will be updated and the output at the end
ref = list(range(0,100)) # Used as a reference for the index
for num in ref[2::3]: # Start after index 2 and count up in 3s
output[num] = ["Fizz"]
for num in ref[4::5]: # Start after index 4 and count up in 5s
if output[num] == ["Fizz"]:
output[num] = ["FizzBuzz"]
else:
output[num] = ["Buzz"]
output
After feeling like I succeeded by getting the correct output, I decided to try and do the same in PowerShell by attempting to reuse my code but became stuck as there is not an alternative to the Python range() sequence type in PowerShell that would count in multiples.
So, over to google to look for a PowerShell solution. I found a blog post by Devin Leaman. After taking a peek at their code, it dawned on me that I could use the % (remainder) operator.
For a great explanation about how to tackle the FizzBuzz question, this Tom Scott video on YouTube is worth a watch.
Refined
Using this new found information by losing the List sequence type and making use of the remainder operator you get the below which is way more elegant than what I came up with initially and it translates to PowersShell.
Python
for num in range(1,101):
output = ""
if num % 3 == 0: output += "Fizz"
if num % 5 == 0: output += "Buzz"
if output == "": output = num
print(output)
PowerShell
ForEach-Object ($num in 1..100)
{
$output = ""
if ($num % 3 -eq 0) { $output += "Fizz" }
if ($num % 5 -eq 0) { $output += "Buzz" }
if ($output -eq "") { $output = $num }
Write-Output $output
}
Hope you are visiting after attempting the question yourself 😀