Hatena::Grouprubyist

うんたらかんたらRuby RSSフィード

2009-02-08

0から51の中から重複のない5つをランダムに選ぶにはどうしますか

| 16:03 | 0から51の中から重複のない5つをランダムに選ぶにはどうしますか - うんたらかんたらRuby を含むブックマーク はてなブックマーク - 0から51の中から重複のない5つをランダムに選ぶにはどうしますか - うんたらかんたらRuby

ruby リファレンスマニュアル FAQ 読む - たばさの - Rubyist


を見て、やってみた。


結果

def getNoneRepeatNumbers(qt,max_num)
  (1..qt).inject([]) do |a, i|
    rand_num = rand(max_num + 1)
    while a.include?(rand_num)
      rand_num = rand(max_num + 1)
    end
    a << rand_num
  end
end

p getNoneRepeatNumbers(5,51)

とりあえず

0から51の中から5つをランダムに

というのは簡単に書けた。

(1..5).inject([]) {|a, i| a << rand(52)}

でも

重複のない

というすっきりした書き方が思いつかない。

再帰を使えばよさそうな気がするが結局whileで書いてしまった。


解答はこちら

FAQ::組み込みライブラリ - Rubyリファレンスマニュアル


続き

RE:0から51の中から重複のない5つをランダムに選ぶにはどうしますか - うんたらかんたらRuby - Rubyist

mas-higamas-higa2009/02/09 17:43これでどうですか?
(0..51).to_a.shuffle[0...5]