Skip to content

Instantly share code, notes, and snippets.

@lukeredpath
Created April 4, 2012 12:42
Show Gist options
  • Save lukeredpath/2300843 to your computer and use it in GitHub Desktop.
Save lukeredpath/2300843 to your computer and use it in GitHub Desktop.
Over-engineered fizzbuzz
# over-engineered version
module FizzBuzzer
def self.evenly_divisible_by?(number, by_number)
(number % by_number) == 0
end
class Fizz
def self.satisfied_by?(number)
FizzBuzzer.evenly_divisible_by?(number, 3)
end
def self.to_s
"fizz"
end
end
class Buzz
def self.satisfied_by?(number)
FizzBuzzer.evenly_divisible_by?(number, 5)
end
def self.to_s
"buzz"
end
end
class FizzBuzz
def self.satisfied_by?(number)
FizzBuzzer.evenly_divisible_by?(number, 15)
end
def self.to_s
"fizzbuzz"
end
end
def self.translate(number)
[FizzBuzz, Fizz, Buzz].each do |klass|
return klass if klass.satisfied_by?(number)
end
return nil
end
def self.print(number)
if (translation = translate(number))
puts "#{number}: #{translation}"
end
end
end
TEST_RANGE = 1..100
TEST_RANGE.each { |i| FizzBuzzer.print(i) }
# what I'd really do:
def fizzbuzz(number)
case 0
when (number % 15)
puts "fizzbuzz"
when (number % 5)
puts "buzz"
when (number % 3)
puts "fizz"
end
end
TEST_RANGE.each { |i| fizzbuzz(i) }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment