challenge ビンゴの結果を整形表示

重複無し乱数」の続編です。

「重複無し乱数」で作ったbingo関数の結果を下のように「何番目の乱数か」とセットにして10個ずつ折り返して表示するコードを書いてください。

>>> bingo(30)
  1  2  3  4  5  6  7  8  9 10
 29 14 16 13 30 15 22 11 25  9

 11 12 13 14 15 16 17 18 19 20
 23  4 18  5 28 17  8 12 21 20

 21 22 23 24 25 26 27 28 29 30
 26  6  2 19  1  7 10 27  3 24

>>> bingo(35)
  1  2  3  4  5  6  7  8  9 10
  7 15  3 32  1 16 17 28  6 29

 11 12 13 14 15 16 17 18 19 20
 19 23 30 26 20  5 12  2 25 31

 21 22 23 24 25 26 27 28 29 30
 35 13 24 18 11  8 10 34 22 21

 31 32 33 34 35
  9  4 27 33 14

Posted feedbacks - D

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import std.random;
import std.stdio;
import std.string;

void show_bingo(int n, int[] xs) {
        int i;
        int j = cast(int)(toString(n).length);
        string s1;
        string s2;
        foreach (x; xs) {
                s1 ~= format("%*d ", j, i);
                s2 ~= format("%*d ", j, x);
                if (0 == (++i % 10)) {
                        writefln("%s\n%s\n", chop(s1), chop(s2));
                        s1 = s2 = "";
                }
        }
        if ("" != s1) {
                writefln("%s\n%s\n", chop(s1), chop(s2));
        }
}

void bingo(int n)
{
        int[] xs;
        for (int i = 1; i <= n; ++i) {
                xs ~= i;
        }
        for (int i = 0; i < n; ++i) {
                uint r = rand() % n;
                int tmp = xs[r];
                xs[r] = xs[i];
                xs[i] = tmp;
        }
        show_bingo(n, xs);
}

/*
void main() {
        bingo(30);
        bingo(35);
}
*/

#5208 同様、dmd 2.009 ではコンパイルできません。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import std.stdio;
import std.random;
import std.string;

void bingo(uint n){
    uint[] a;
    a.length = n;
    foreach(i, ref e; a){
        e = i + 1;
    }
    randomShuffle(a, Random(unpredictableSeed()));

    uint max = 10;

    string[] indexBuf, randBuf;
    int numWidth = toString(n).length;
    foreach(i, e; a){
        indexBuf ~= format("%*d", numWidth, i + 1);
        randBuf ~= format("%*d", numWidth, e);
        if((i + 1) % max == 0 || i == a.length - 1){
            writeln(indexBuf.join(" "));
            writeln(randBuf.join(" "));
            if(i != a.length - 1){
                writeln();
            }
            indexBuf.length = randBuf.length = 0;
        }
    }
}

void main(){
    bingo(30);
    writeln("----");
    bingo(35);
}

Index

Feed

Other

Link

Pathtraq

loading...