重複無し乱数
Posted feedbacks - OCaml
1 2 3 4 5 6 | #light
let shuffle ls =
let rnd = new System.Random() in
List.sort (fun x y-> rnd.Next(-1,2)) ls;;
let bingo n = shuffle [1..n]
|
気付くと嬉しいアルゴリズム。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | module Array = struct
include Array
let bury arr n len =
Array.blit arr (n+1) arr n (len-(n+1))
let shuffle arr =
let len = Array.length arr in
for i = len downto 1 do
let v = Random.int i in
let value = arr.(v) in
bury arr v i;
Array.set arr (i-1) value;
done
end;;
let bingo n =
let res = Array.init n (fun i -> i+1) in
Array.shuffle res;
res;;
|



raynstard
#3402()
Rating0/0=0.00
このお題はraynstardさんの投稿を元にしています。ご投稿ありがとうございました。 投稿の内容には表示のしかたも含まれていたのですが、 このお題では「重複しない1~nまでの乱数をどうやって作るか」という点に集中することにして、 結果の整形は続編としてこの後のお題で出すことにします。 サンプル入出力は下のようになります。
[ reply ]