24 March 2010
Yet Another Ruby FizzBuzz その4
Yet Another Ruby FizzBuzz その4
class Fixnum
def fizzbuzz
w = {Fizz: 3, Buzz: 5}.select { |_, base| (self%base).zero? }
w.empty? ? self : w.keys.join
end
end
(1..100).each { |i| print "#{i.fizzbuzz} " }
Enumerable#injectのほうがいいかな
class Fixnum
def fizzbuzz
w = {Fizz: 3, Buzz: 5}.inject("") { |mem, (word, base)| (self%base).zero? ? mem << word : mem }
w.empty? ? self : w
end
end
(1..100).each { |i| print "#{i.fizzbuzz} " }
Yet Another Ruby FizzBuzz その3
divisible_by = lambda { |base, num| (num % base).zero? }.curry
divisible_by_15 = divisible_by[15]
divisible_by_3 = divisible_by[3]
divisible_by_5 = divisible_by[5]
(1..100).each do |i|
puts case i
when divisible_by_15 then 'FizzBuzz'
when divisible_by_3 then 'Fizz'
when divisible_by_5 then 'Buzz'
else i
end
end
Yet Another Ruby FizzBuzz その2
class Fixnum
def self.fizzbuzzize
alias org_to_s to_s
def to_s
if self%15 == 0 then "FizzBuzz"
elsif self%3 == 0 then "Fizz"
elsif self%5 == 0 then "Buzz"
else self.org_to_s
end
end
end
def self.unfizzbuzzize
undef to_s
alias to_s org_to_s
end
end
Fixnum.fizzbuzzize
(1..100).each { |i| print "#{i} " }
puts
Fixnum.unfizzbuzzize
(1..100).each { |i| print "#{i} " }
blog comments powered by Disqus