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 - R

Rもそうですが、MathematicaやMATLABのような数値解析系はこういうの簡単に書けますね。
元のお題は「n * nのビンゴを出力せよ」みたいな感じだったのかな。

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

もし,sample 関数がないとしたら,他の関数を使ってどう書くかを
つまり,n個の一様乱数を発生させ,一様乱数の大きさの順で1〜nを並び替える

> foo(10)
 [1] 10  9  1  3  2  5  7  8  4  6
> foo(10)
 [1]  7 10  2  9  5  4  1  8  3  6
> foo(100)
  [1]   7  84  53  70  26  21  90  37  33  82  65  40  74  95  24   1   4  97  38   6
 [21]  94  15  18  12  29  19  43  52  85  47   3  64  78  88  81  46  87  55  16  28
 [41]  62  41  17  36  25  42  39  11  56  58  61  91  44  20  51  71  60  31  75  96
 [61]  80  13  50  14  10  57  59  35   5  48  30  77  27  67 100  72  92  68  54  83
 [81]  79  89  73  23  98  99  69  76   8   2  22  86  63  93  66  32  34   9  45  49
1
foo <- function(n) (1:n)[order(runif(n))]

Index

Feed

Other

Link

Pathtraq

loading...