module FizzBuzzQuiz
def fizz; self % 3 == 0 ? concat('Fizz') : self end
def buzz; self % 5 == 0 ? concat('Buzz') : self end
def gizz; self % 7 == 0 ? concat('Gizz') : self end
end
class Integer
include FizzBuzzQuiz
def concat(str); ''.instance_exec(self){ |n| @n = n; self }.concat(str) end
end
class String
include FizzBuzzQuiz
def %(m); @n % m end
end
p 1.fizz.buzz #=> 1
p 3.fizz.buzz #=> "Fizz"
p 5.fizz.buzz #=> "Buzz"
p 15.fizz.buzz #=> "FizzBuzz"
p 997.fizz.buzz #=> 997
p 7.fizz.buzz.gizz #=> "Gizz"
p 21.fizz.buzz.gizz #=> "FizzGizz"
p 35.fizz.buzz.gizz #=> "BuzzGizz"
p 105.fizz.buzz.gizz #=> "FizzBuzzGizz"
p 105.fizz.gizz.buzz #=> "FizzGizzBuzz"
bW9kdWxlIEZpenpCdXp6UXVpegogIGRlZiBmaXp6OyBzZWxmICUgMyA9PSAwID8gY29uY2F0KCdGaXp6JykgOiBzZWxmIGVuZAogIGRlZiBidXp6OyBzZWxmICUgNSA9PSAwID8gY29uY2F0KCdCdXp6JykgOiBzZWxmIGVuZAogIGRlZiBnaXp6OyBzZWxmICUgNyA9PSAwID8gY29uY2F0KCdHaXp6JykgOiBzZWxmIGVuZAplbmQKCmNsYXNzIEludGVnZXIKICBpbmNsdWRlIEZpenpCdXp6UXVpegogIGRlZiBjb25jYXQoc3RyKTsgJycuaW5zdGFuY2VfZXhlYyhzZWxmKXsgfG58IEBuID0gbjsgc2VsZiB9LmNvbmNhdChzdHIpIGVuZAplbmQKCmNsYXNzIFN0cmluZwogIGluY2x1ZGUgRml6ekJ1enpRdWl6CiAgZGVmICUobSk7IEBuICUgbSBlbmQKZW5kCgpwIDEuZml6ei5idXp6ICM9PiAxCnAgMy5maXp6LmJ1enogIz0+ICJGaXp6IgpwIDUuZml6ei5idXp6ICM9PiAiQnV6eiIKcCAxNS5maXp6LmJ1enogIz0+ICJGaXp6QnV6eiIKcCA5OTcuZml6ei5idXp6ICM9PiA5OTcKcCA3LmZpenouYnV6ei5naXp6ICM9PiAiR2l6eiIKcCAyMS5maXp6LmJ1enouZ2l6eiAjPT4gIkZpenpHaXp6IgpwIDM1LmZpenouYnV6ei5naXp6ICM9PiAiQnV6ekdpenoiCnAgMTA1LmZpenouYnV6ei5naXp6ICM9PiAiRml6ekJ1enpHaXp6IgpwIDEwNS5maXp6LmdpenouYnV6eiAjPT4gIkZpenpHaXp6QnV6eiI=