サイログ。

~雑多な記事置き場~

[Ruby] Sleep Sort のをFiber@Rubyで実装

id:gfxさんの記事を読んで大爆笑してしまったので、ついついRuby1.9.2+Fiberで作ってしまいました。
というわけで、メモ。

元ネタ: Islands in the byte stream/常識を覆すソートアルゴリズム!その名も"sleep sort"!

def create_fiber(v)
  f = Fiber.new do
    t1 = Time.now
    while(true)
      break if Time.now - t1 >= v
      Fiber.yield(true)
    end
    puts v
    while(true); Fiber.yield false; end
  end
end

fibers = ARGV.map{|v| create_fiber(v.to_i) }

while(fibers.map{|fib| fib.resume }.any?); end

実行するとこんな感じ。

$>ruby fsleep.rb 5 3 1 4
1
3
4
5