鍋あり谷あり

テーマを決めずに適当に書いています。

久々に 剰余なしで FizzBuzz

はるか昔に書いた
http://d.hatena.ne.jp/Nabetani/20070510/p1
が、ruby 2.1.0 では動かないようなので、書きなおした。

def f(name,n)
  Fiber.new do
    loop do
      (n-1).times{ Fiber.yield "" }
      Fiber.yield name
    end
  end
end

def fb(sup, *x)
  s=x.map{|name,n| f(name,n)}
  1.upto(sup) do |n|
    yield( (r=s.map{|x|x.resume}.join).empty? ? n : r )
  end
end

fb( 100, [ 'Fizz', 3], [ 'Buzz', 5 ] ) do |s|
  puts s
end

Generator がなくなって Fiber になったらしいので、それに関する対応。
ほかにも多少変更したけど。