Rubyによる不適切なFizzBuzzの世界 - Qiitaが、FizzBuzzerを刺激するから…。

その1

class FizzBuzz
  def self.to_proc
    ->n{ 
      case 0
      when n % 15 then :FizzBuzz
      when n % 3  then :Fizz
      when n % 5  then :Buzz
      else n
      end
    }
  end
end

puts (1..100).map(&FizzBuzz) # => [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, :Fizz, 52, 53, :Fizz, :Buzz, 56, :Fizz, 58, 59, :FizzBuzz, 61, 62, :Fizz, 64, :Buzz, :Fizz, 67, 68, :Fizz, :Buzz, 71, :Fizz, 73, 74, :FizzBuzz, 76, 77, :Fizz, 79, :Buzz, :Fizz, 82, 83, :Fizz, :Buzz, 86, :Fizz, 88, 89, :FizzBuzz, 91, 92, :Fizz, 94, :Buzz, :Fizz, 97, 98, :Fizz, :Buzz]

その2

module Base
  def div_by(base, n)
    !n.is_a?(Fixnum) || (n % base).zero? ? self : n
  end

  def coerce(n)
    [self, n]
  end
end

class FizzBuzz
  extend Base
  class << self
    def |(n)
      div_by(15, n)
    end
  end
end

class Fizz
  extend Base
  class << self
    def |(n)
      div_by(3, n)
    end
  end
end

class Buzz
  extend Base
  class << self
    def |(n)
      div_by(5, n)
    end
  end
end

puts (1..100).map { |n| n | FizzBuzz | Fizz | Buzz  } # => [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, Fizz, 52, 53, Fizz, Buzz, 56, Fizz, 58, 59, FizzBuzz, 61, 62, Fizz, 64, Buzz, Fizz, 67, 68, Fizz, Buzz, 71, Fizz, 73, 74, FizzBuzz, 76, 77, Fizz, 79, Buzz, Fizz, 82, 83, Fizz, Buzz, 86, Fizz, 88, 89, FizzBuzz, 91, 92, Fizz, 94, Buzz, Fizz, 97, 98, Fizz, Buzz]

ちょっと挙動がユニークだけど…

変態度が足りませんでしたm(__)m



blog comments powered by Disqus
ruby_pack8

100円〜で好評発売中!
M'ELBORNE BOOKS