challenge n人中m人が当選するくじ

n人の中から公平にm人を選ぶ、くじ引きプログラムを作ってください。

Posted feedbacks - Bash

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
function randsample() {
    local n=$1
    local m=$2
    local -a array
    local -i i j tmp

    for ((i = 0; i < n; i++)) {
        array[i]=$i
    }

    # shuffle
    for ((i = 0; i < n; i++)) {
        ((j = RANDOM % (i + 1),
          tmp = array[i], array[i] = array[j], array[j] = tmp))
    }

    # print top m
    for ((i = 0; i < m && i < n; i++)) {
        echo ${array[i]}
    }
}

randsample 100 10

GNU coreutilsのshufで。

1
2
3
4
5
6
#!/bin/sh
randsample() {
    seq $1 | shuf | head -n $2
}

randsample 100 10

Index

Feed

Other

Link

Pathtraq

loading...