ビンゴシートの作成

ビンゴゲーム・ジェネレータ - みずぴー日記 にインスパイヤされてビンゴシートを作ってみます。 個人的にはビンゴで良いものが回ってきたことがないので、使うことはないのですが、awk で作ってみました。

単に乱数だとダブってしまうため、一度 1 から 99 までの配列を作成し、これをシャッフルしたものを使います。 AWK Users JP :: 配列のシャッフル などで何度かシャッフル関数は登場していますので、これを使います。

#! /usr/local/bin/nawk -f
# bingo.awk
# ビンゴのシートを作る
# usage: nawk -f bingo.awk

BEGIN {
    srand();

    # 1 から 99 までの配列を生成
    for (i = 1; i <= 99; i++) {
        arr[i] = i;
    }

    # 配列をシャッフルする
    shuffle_array(arr);

    arr[13] = "*";                          # 真ん中

    # シャッフルされたものから先頭 25 文字を取り出す
    for (i = 1; i <= 25; i++) {
        str = str sprintf("%5s ", arr[i]);
        if (i % 5 == 0) {
            str = str "\n";
        }
    }

    printf("%s", str);
}

# 配列をシャッフル
function shuffle_array(arr,    tmp, a, num_arr, i, j) {
    for (a in arr) {
        num_arr++;
    }

    for (i = num_arr; i >= 1; i--) {
        j = int((i + 1) * rand()) + 1;
        tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}

実行してみます。

$ nawk -f bingo.awk
   46     5     8    99    90 
   61     7    56     4    43 
   54    79     *    45    11 
   10    68     6    83    32 
   97    89    78    77    67 

$ nawk -f bingo.awk
   89    96    68    21    85 
   75    73    31    45    15 
   84    49     *    69    61 
   77    12    94    20    59 
    8    50    14    16    86 

最初に srand() を入れておくことで、同じシャッフル結果にならなく (実際にはなりにくく) なります。

tag_nawk.png tag_nawk.png tag_nawk.png tag_nawk.png