challenge 重複無し乱数

整数nを渡すと1 ~ n までの整数を重複しないようランダムに出力する関数「bingo」を作ってください。

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

>>> bingo(10)
[10, 7, 8, 4, 5, 2, 3, 1, 6, 9]
>>> bingo(3)
[2, 3, 1]
>>> bingo(3)
[2, 3, 1]
>>> bingo(3)
[3, 1, 2]
>>> bingo(10)
[7, 3, 8, 6, 4, 10, 9, 2, 1, 5]

Posted feedbacks - Erlang

1> c(bingo).
{ok,bingo}
2> bingo:bingo(10).
[3,1,9,2,5,10,8,4,6,7]
3> bingo:bingo(3).
[2,1,3]
4> bingo:bingo(3).
[1,3,2]
5> bingo:bingo(3).
[1,2,3]
6> bingo:bingo(10).
[10,3,5,1,4,6,2,7,8,9]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
-module(bingo).
-export([bingo/1]).

bingo(Num) -> bingo_sub(lists:seq(1, Num), Num).

bingo_sub(List, 0) -> List;
bingo_sub(List, Num) ->
    R = lists:nth(random:uniform(length(List)), List),
    L = [R | [X || X <- List, X =/= R]],
    bingo_sub(L, Num - 1).

Index

Feed

Other

Link

Pathtraq

loading...