fork download
  1. module FizzBuzzQuiz
  2. def concat(str); ''.instance_exec(self){ |n| @n = n; self }.concat(str) end
  3. def modulo(m); @n % m end
  4. def fizz; modulo(3) == 0 ? concat('Fizz') : self end
  5. def buzz; modulo(5) == 0 ? concat('Buzz') : self end
  6. end
  7.  
  8. [Fixnum, String].each{ |c| c.include(FizzBuzzQuiz) }
  9.  
  10. p 1.fizz.buzz #=> 1
  11. p 3.fizz.buzz #=> "Fizz"
  12. p 5.fizz.buzz #=> "Buzz"
  13. p 15.fizz.buzz #=> "FizzBuzz"
  14. p 15.buzz.fizz #=> "BuzzFizz"
  15. p 7.fizz.buzz #=> 7
  16.  
  17. module FizzBuzzQuiz
  18. def gizz; modulo(7) == 0 ? concat('Gizz') : self end
  19. end
  20.  
  21. p 7.fizz.buzz.gizz #=> "Gizz"
  22. p 21.fizz.buzz.gizz #=> "FizzGizz"
  23. p 35.fizz.buzz.gizz #=> "BuzzGizz"
  24. p 105.fizz.buzz.gizz #=> "FizzBuzzGizz"
  25. p 105.fizz.gizz.buzz #=> "FizzGizzBuzz"
  26. p 105.gizz.buzz.fizz #=> "GizzBuzzFizz"
  27.  
  28. # 以下も念のため
  29. p 1.fizz.buzz.gizz #=> 1
  30. p 3.fizz.buzz.gizz #=> "Fizz"
  31. p 5.fizz.buzz.gizz #=> "Buzz"
  32. p 15.fizz.buzz.gizz #=> "FizzBuzz"
  33. p 15.buzz.fizz.gizz #=> "BuzzFizz"
  34. p 104.fizz.buzz.gizz #=> 104
Success #stdin #stdout 0s 28688KB
stdin
Standard input is empty
stdout
1
"Fizz"
"Buzz"
"FizzBuzz"
"BuzzFizz"
7
"Gizz"
"FizzGizz"
"BuzzGizz"
"FizzBuzzGizz"
"FizzGizzBuzz"
"GizzBuzzFizz"
1
"Fizz"
"Buzz"
"FizzBuzz"
"BuzzFizz"
104