« Kanasan.JS JavaScript第5版読書会#2で使ったTimer | メイン | JavaScriptで作ったマインスイーパ »

「第22回 Ruby/Rails勉強会@関西」の課題への一回答

こなみ先生の「ショートな課題でジャムプログラミング」の課題のひとつに「配列をシャッフルする」関数の作成があった。
そのときLingr上で「sort_byもrandも使わずに実装するには?」というような話があったので実装してみた。
#!/usr/bin/ruby
def shuffle(a)
  rtn = Array.new
  ary = a.clone
  rnd=0
  while(ary.size>0)
    rnd = (rnd+Time.now.to_f).hash.to_i
    idx = rnd % ary.size
    rtn<<ary.slice!(idx)
  end
  rtn
end

testary = [1,2,3,4,5]
p shuffle(testary)
肝はTime.nowをseedに使用している点と、Time.nowによる偏りが出ないようにhashを使用している点かと思う。まあ、たいした事はしていないけど。
追記
何故かTB送っても受け取ってもらえない...。

トラックバック

このエントリーのトラックバックURL:
http://www.kanasansoft.com/cgi/mt/mt-tb.cgi/82

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google