とりあえず、スタートのスクリプトは@fumokmmさんのエントリー『Groovyで範囲内乱数』です。
では、スクリプトをどうぞ。(コピペ)
IntRange.metaClass.define{
random{
int from = delegate.isReverse() ? to : from
int to = delegate.isReverse() ? from : to
int size = to - from + 1
(Math.floor(Math.random() * size) + from) as int
}
}
これで、乱数発生の装置は作成できたので、おもむろに作成した乱数をListにぶっこむ処理を書いてみる。
range = 1..20
def getRandom = {run ->
def values = []
run.times{values << range.random()}
withPool {
values.parallel
.map{[it, 1]}
.groupBy{it[0]}.getParallel()
.map{it.value = it.value.size();it}
.sort{it.key}
.collection
}
}
そして、実行してみる。
getRandom(20 * 10)
予想される結果としては、1~20までの数値が10個を中心として発生するはず。
実行結果1
[1=4, 2=7, 3=7, 4=14, 5=12, 6=10, 7=12, 8=12, 9=5, 10=10, 11=10, 12=5, 13=8, 14=11, 15=12, 16=19, 17=6, 18=18, 19=10, 20=8]
実行結果2
[1=11, 2=8, 3=11, 4=5, 5=10, 6=10, 7=11, 8=7, 9=14, 10=12, 11=9, 12=11, 13=10, 14=14, 15=10, 16=10, 17=7, 18=12, 19=8, 20=10]
実行結果3
[1=10, 2=10, 3=10, 4=9, 5=14, 6=15, 7=8, 8=11, 9=10, 10=8, 11=7, 12=9, 13=10, 14=10, 15=11, 16=6, 17=10, 18=5, 19=10, 20=17]
む、一応、ランダムに数字が発生しているような気がするが、これはランダムと言えるのだろうか?
0 件のコメント:
コメントを投稿