Think In Geek

In geek we trust

# A Ruby implementation of the FizzBuzz test using the Enumerator class

Some days ago I learnt about The FizzBuzz Test and did a simple implementation in Ruby. The FizzBuzz test is a simple algorithm that is supposed to do the following:

For each number from 1 to 100:

• If the number is divisible by 3, print “Fizz”
• If the number is divisible by 5, print “Buzz”
• If the number is divisible by both 3 and 5, print “FizzBuzz”
• Otherwise print the number

I was just reading about how you can use the Enumerator class to have generators in the Programming Ruby 1.9 book, and thought that a good implementation could be done using just an Enumerator, so here it is, along with a simple RSpect test:

```FizzBuzz = Enumerator.new do |yielder| count = 1 loop do if count % 3 == 0 if count % 5 == 0 yielder.yield "FizzBuzz" else yielder.yield "Fizz" end elsif count % 5 == 0 yielder.yield "Buzz" else yielder.yield count end count += 1 end end```

```require_relative 'fizzbuzz'   describe FizzBuzz do before(:all) do @fizzbuzzes = FizzBuzz.first(100) end   it "returns 'Fizz' for all multiples of 3" do @fizzbuzzes[3-1].should == 'Fizz' end   it "returns 'Buzz' for all multiples of 5" do @fizzbuzzes[5-1].should == 'Buzz'   end   it "returns 'FizzBuzz' for all multiples of 3 and 5" do @fizzbuzzes[60 - 1].should == 'FizzBuzz'   end   it "returns the passed number if not a multiple of 3 or 5" do @fizzbuzzes[1 - 1].should == 1 end end```

You can also find the code in its GitHub repository: https://github.com/brafales/ruby-fizzbuzz.

This site uses Akismet to reduce spam. Learn how your comment data is processed.