PowerShelling FizzBuzz

I recently learned about the FizzBuzz test, which is meant to help interviewers determine if a prospective hire can understand the fundamental logic needed to program.

The premise is this:

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”.

I thought this sounded like a fun challenge, so I decided to try my hand at it.

At first, this seemed deceptively easy. Set up a For-Each loop with $num incrementing. If the number is divisibile by 3, then performing a modulo operation will result in a remainder of zero.

Perform the same if the number is divisble by five. Then write either Fizz or Buzz based on which was true.

However, if the number is divisible by BOTH, write out Fizzbuzz instead, and then proceed. The problem here was catching for the AND condition, very similar to a binary math operation. I eventually discarded my ForEach and instead used a While Loop, as the behavior of Continue and Break within a For loop lead to undesired outcomes.

Here is my answer:

Function Start-FizzBuzz {
$num = 0
while ($num -lt 100) { #-lt is shorthand for LessThan 
    $fizz = $false
    $buzz = $false
    
   
    $num++
    if (($num % 3) -eq 0) {$fizz = $true;}
    if (($num % 5) -eq 0) {$buzz = $true;}


    if (($fizz) -and ($buzz)){
        "FIZZBUZZ"
        continue 
        #continue tells PowerShell to continue on to the next object in series, and gets around a situation where we'd get output of FIZZ, BUZZ, FIZZBUZZ
        }
    if ($fizz){
              "FIZZ"
               CONTINUE
               }
    if ($buzz){
               "BUZZ"
               CONTINUE
               }
    
    $num #if we didn't write Fizz, Buzz or FizzBuzz, write the number itself
    }
}

Advertisements

2 thoughts on “PowerShelling FizzBuzz

  1. Kamal January 24, 2015 / 11:42 pm

    This is good, though I would have simplified all of those IF statements, to something like:
    $num = 0;
    while ($num -lt 100) {
    $num++;
    if (!($num % 15)) { write-host “fizzbuzz” }
    elseif (!($num % 3)) { write-host “fizz” }
    elseif (!($num % 5)) { write-host “buzz” }
    else { write-host $num }
    }

    The common divisor between any two numbers will always be their product. IE, the numbers divisible by 3 and 5 is any number divisible by (3*5).

Have a code issue? Share your code by going to Gist.github.com and pasting your code there, then post the link here!

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s