Ruby

FizzBuzz

仕様

  • 3で割り切れる場合は「Fizz」を出力する。

  • 5で割り切れる場合は「Buzz」を出力する。

  • 両者で割り切れる場合は「FizzBuzz」を出力する。

  • 上記以外の場合は数値を返す。

  • 指定された回数だけ繰り返し実行する。

設計

Todo

  • [STRIKEOUT:Fizzを出力できるようにする]

  • [STRIKEOUT:Buzzを出力できるようにする]

  • [STRIKEOUT:FizzBuzzを出力できるようにする]

  • [STRIKEOUT:繰り返し実行できるようにする]

開発

[2]:
class FizzBuzz
  def self.generate(number)
    value = number

    if (value % 3 == 0) && (value % 5 == 0)
      value = 'FizzBuzz'
    elsif value % 3 == 0
      value = 'Fizz'
    elsif value % 5 == 0
      value = 'Buzz'
    end

    value
  end

  def self.iterate(count)
    array = []
    count.times do |n|
      n += 1
      array.push(FizzBuzz.generate(n))
    end
    array
  end
end

require 'minitest/autorun'
class FizzBuzzSpec < Minitest::Spec
  describe FizzBuzz do
    it '3ならばFizzを返す' do
      expect(FizzBuzz.generate(3)).must_equal 'Fizz'
    end

    it '9ならばFizzを返す' do
      expect(FizzBuzz.generate(9)).must_equal 'Fizz'
    end

    it '5ならばBuzzを返す' do
      expect(FizzBuzz.generate(5)).must_equal 'Buzz'
    end

    it '10ならばBuzzを返す' do
      expect(FizzBuzz.generate(10)).must_equal 'Buzz'
    end

    it '50ならばBuzzを返す' do
      expect(FizzBuzz.generate(50)).must_equal 'Buzz'
    end

    it '15ならばFizzBuzzを返す' do
      expect(FizzBuzz.generate(15)).must_equal 'FizzBuzz'
    end

    it '30ならばFizzBuzzを返す' do
      expect(FizzBuzz.generate(30)).must_equal 'FizzBuzz'
    end

    it '5回実行されたならば配列を返す' do
      expect(FizzBuzz.iterate(5)).must_equal [1, 2, 'Fizz', 4, 'Buzz']
    end

    it '10回実行されたならば配列を返す' do
      expect(FizzBuzz.iterate(10)).must_equal [1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz']
    end
  end
end

  File "<ipython-input-2-ce17789aca0e>", line 1
    class FizzBuzz
                  ^
SyntaxError: invalid syntax