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使わないで書くわ、という方はコメントお願いします。
コメントでもコードを書けます。