Different levels of FizzBuzz (using Ruby)

If you are old enough like me, you probably already did (or make pass) a FizzBuzz exercise during an interview.
I don't think it is still used anymore but it used to be a classic.

So let's grab a beer and start coding.

First implementations

The first implementation here is the basic one, it works fine and is pretty much the same on every language.

1.upto(100) do |i|  if i % 3 == 0 && i % 5 == 0    puts 'FizzBuzz'  elsif i % 3 == 0    puts 'Fizz'  elsif i % 5 == 0    puts 'Buzz'  else    puts i  endend

But we can get rid of one useless if statement.
Some people would say that the ternary operator is not that much readable and
prefer using a boolean but both solutions are totally fine for me.

1.upto(100) do |i|  result = ''  if i % 3 == 0    result += 'Fizz'  end  if i % 5 == 0    result += 'Buzz'  end  puts result == '' ? i : resultend

Finally if the developer is familiar with the language, he should write more "idiomatic" code, Ruby in our case :

1.upto(100) do |i|  result = ''  result += 'Fizz' if (i % 3).zero?  result += 'Buzz' if (i % 5).zero?  puts result.empty? ? i : resultend

Use a datastructure

What if we need to extends this code ?
What if I want to add another prime number, for example 7 is 'Bazz'?
The next level for this exercise should be to use a datastructure, like a dictionary in python or a hash in ruby.

FIZZ_BUZZ = {  fizz: 3,  buzz: 5}1.upto(100) do |i|  result = ''  FIZZ_BUZZ.map do |text, divisor|    result += text.to_s.capitalize if (i % divisor).zero?  end  puts result.empty? ? i : resultend

Use lambdas

For our last version, let's use a lambda and move our modulo predicate to the hash

FIZZ_BUZZ = {  fizz: ->(i) { (i % 3).zero? },  buzz: ->(i) { (i % 5).zero? }}1.upto(100) do |i|  result = ''  FIZZ_BUZZ.map do |text, predicate|    result += text.to_s.capitalize if predicate.call(i)  end  puts result.empty? ? i : resultend

Bonus point: machine learning :)

A crazy guy implemented a solution using machine learning
Check it out, it's really fun.