LoginSignup
1
0

More than 5 years have passed since last update.

FizzBuzzクイズのruby実装例

Posted at

https://qiita.com/sumim/items/f26902f2b813c075a619 見て書いてみたけどStringの場合とIntegerの場合のメソッドで2つ実装別れてしまっていけてないかんじになっちゃった

module FizzBuzz
  refine(String)do
    def fizzbuzz
      @fizzbuzz
    end

    def fizzbuzz=(n)
      extend(FizzBuzz)
      instance_variable_set(:@fizzbuzz, n)
    end
  end
end

module Fizz
  refine(Integer) do
    using FizzBuzz

    def fizz?
      (self % 3).zero?
    end

    def fizz
      if fizz?
        "Fizz".tap {|s| s.fizzbuzz = self }
      else
        self
      end
    end
  end
end

module Buzz
  refine(Integer) do
    using FizzBuzz

    def buzz?
      (self % 5).zero?
    end

    def buzz
      if buzz?
        "Buzz".tap {|s| s.fizzbuzz = self }
      else
        self
      end
    end
  end

  refine(String) do
    using FizzBuzz

    def buzz
      if fizzbuzz.buzz?
        concat("Buzz")
      else
        self
      end
    end
  end
end

using Fizz
using Buzz

1.upto(100) { |n| p n.fizz.buzz }
1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0