こなみ先生の「ショートな課題でジャムプログラミング」の課題のひとつに「配列をシャッフルする」関数の作成があった。
そのときLingr上で「sort_byもrandも使わずに実装するには?」というような話があったので実装してみた。
そのとき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)
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送っても受け取ってもらえない...。