Ruby

「FizzBuzzクイズ」クイズ-Ruby編 を解いてみた

「FizzBuzzクイズ」クイズ-Ruby編 の記事が目に飛び込んできたので自分も試しに解いてみました。

fizzbuzz.rb
class FizzBuzz
  def initialize(receiver)
    @receiver = receiver
    @value = ''
  end

  def fizz
    @value << 'Fizz' if @receiver % 3 == 0
    self
  end

  def buzz
    @value << 'Buzz' if @receiver % 5 == 0
    self
  end

  def to_s
    value.to_s
  end

  def inspect
    value.inspect
  end

  private

  def value
    @value == '' ? @receiver : @value
  end
end

class Integer
  def fizz
    FizzBuzz.new(self).fizz
  end

  def buzz
    FizzBuzz.new(self).buzz
  end
end

1.upto(100) do |i|
  puts i.fizz.buzz
end

メソッドを呼び出した段階で FizzBuzz オブジェクトに変換して後はその中で処理を行うようにしました。

追記

投稿した後に気づいたのですが、下記の部分を満たしていなかったですね :fearful:

3の倍数の引数(レシーバー)を与えると"Fizz"を返し、5の倍数を与えると"Buzz"を返すメソッドを適当なクラス(あるいはモジュール)に定義せよ