LoginSignup
3
3

More than 5 years have passed since last update.

頭の体操的な問題3_ランダムに数を選ぶ

Last updated at Posted at 2014-04-26

2014.4.26の第15回ゆるびぃ会で出題した問題の記録です。

問. 1から100までの整数から10個をランダムに選ぶ

  • 今回は岡野さんが問題を考えてくれました。
  • 重複はダメ。
  • 制限時間は10分。
  • 言語はなんでもOK。

ちなみに私は以下のように書きました。

sample.rb
[*1..100].sample(10)

Rubyだとあまりに簡単なのでclojureでも書いてみました。

sample.clj
(take 10 (shuffle (range 1 101)))

これ「100から10個選ぶ」だからsampleでも良いですけど10000000から10個選ぶだとsampleでは遅いので頭を使わないといけないかもしれません。
ちょっと考えてみました。(2014-04-27 08:11 ちょっと修正)

sample2.rb
def random_take(n, max)
  [].tap do |ary|
    break ary if max < n
    r = Random.new
    while ary.size < n
      i = r.rand(1..max)
      ary << i unless ary.include? i
    end
  end
end

p random_take(10, 10000000)

「もっと良い解き方がある!」とか、sample使わないで書くわ、という方はコメントお願いします。
コメントでもコードを書けます。

3
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3