カブらない数字を4桁だすのまとめ
カブらない数字を4桁だすの - $ dropdb 人生
http://d.hatena.ne.jp/dropdb/20071109/1194535114
ひとつの事をするのに随分いろんなパターンがあるんだなぁ。
ary = [] #空の配列です。 4.times{ #4回繰り返して n = rand 10 #0-9までの乱数を発生させ配列に入れる。 redo if ary.include? n #既に配列にnがあった場合はもう1度 ary.push n } print ary
redo は制御構造でヘルプには
ループ条件のチェックを行なわず、現在の繰り返しをやり直します。
とある。
別回答
nums = (0..9).to_a 4.times do print nums.delete_at(rand(nums.size)) end
先に0から9までの配列を作っておいて、そこからランダムに一つずつ取り出すイメージ。
to_a
オブジェクトを配列に変換してその配列を返します。
普通に配列に変換できないオブジェクトは、自身のみを含む長さ 1 の配列に変換されます
(ruby 1.7 feature: Object のこのメソッドは将来なくなるかもしれません。1.7 では警告が出ます)。
1.8では
ruby 1.8 feature: 多重代入の右辺に * を伴ったオブジェクトが現れた場合、そのオブジェクトが to_a を定義していればその結果が利用されます。 to_a が定義されていない場合は、右辺が自身を含む長さ 1 の配列に変換された後で代入が行われます。
例
class Foo def to_a [1, 2, 3] end end a, b, c = *Foo.new p [a, b, c] # => [1, 2, 3]
コメント欄から
p (0..9).sort_by{rand}[0,4]
0から9までの数字をばらばらに並べ替えて、あたまから4をとる、という感じです。
人のコードは勉強になりますね。
どう書く?org http://ja.doukaku.org/
にも お題とコードがたくさんあります。