FizzBuzzを判定するクラスを書きました
case式で順不同で使えるのがポイントです^^;
class FB
{FB:[15], F:[3,5], B:[5,3]}.each do |name, base|
k = Class.new do
define_singleton_method(:===) do |n|
(n%base[0]).zero? && (base[1] ? !(n%base[1]).zero? : true)
end
end
const_set(name, k)
end
end
def fizzbuzz(i)
case i
when FB::F; :Fizz
when FB::B; :Buzz
when FB::FB; :FizzBuzz
else i
end
end
(1..50).map { |i| fizzbuzz i } # => [1, 2, :Fizz, 4, :Buzz, :Fizz, 7, 8, :Fizz, :Buzz, 11, :Fizz, 13, 14, :FizzBuzz, 16, 17, :Fizz, 19, :Buzz, :Fizz, 22, 23, :Fizz, :Buzz, 26, :Fizz, 28, 29, :FizzBuzz, 31, 32, :Fizz, 34, :Buzz, :Fizz, 37, 38, :Fizz, :Buzz, 41, :Fizz, 43, 44, :FizzBuzz, 46, 47, :Fizz, 49, :Buzz]