n人中m人が当選するくじ
Posted feedbacks - awk
echo John Paul George Ringo | awk -v m=2 -f lot.awk
のようにして使います。
1 2 3 4 5 6 7 8 9 10 | function swap(a, b, tmp) { tmp = $a; $a = $b; $b = tmp }
{
n = NF
while (m) {
swap(int(rand() * n + 1), n)
print $n
n--; m--;
}
}
|
gawk -f lottery.awk <m> <n> [seed] として使うと、0~(m-1)の数字からランダムでn個表示します。 seedはオプションです。 ex) gawk -f lottery.awk 10 3 0 4 7 任意の数字が選ばれる確率は、(残りの当選数)/(残りの総数)となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | BEGIN {
m = ARGV[1]
n = ARGV[2]
if(ARGC == 4) {
srand(ARGV[3])
} else {
srand()
}
for(i = 0; i < m; i++) {
if(rand() * (m - i) < n) {
print i
n--
}
if(n == 0) {
break
}
}
}
|



にしお
#3360()
Rating0/0=0.00
[ reply ]