viewing paste shuffletest (PR #872) | Athena | Private

Posted on the | Last edited on
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
-   script  ShuffleTest -1,{
OnInit:
    .@samplesize = 1000;
    .@iterations = 100;
    freeloop true;
    .@start = gettimetick(0);
    for (.@i = 0; .@i < .@iterations; ++.@i)
        callfunc("Haru_shuffle", .@samplesize, .@output);
    .@time = gettimetick(0) - .@start;
    debugmes(sprintf("time used = %0d.%02d ms", .@time/.@iterations, .@time%.@iterations));
 
    .@start = gettimetick(0);
    for (.@i = 0; .@i < .@iterations; ++.@i)
        callfunc("keyworld_inf_shuffle", .@samplesize, .@output);
    .@time = gettimetick(0) - .@start;
    debugmes(sprintf("time used = %0d.%02d ms", .@time/.@iterations, .@time%.@iterations));
 
    .@start = gettimetick(0);
    for (.@i = 0; .@i < .@iterations; ++.@i)
        callfunc("modern_fisher_yates", .@samplesize, .@output);
    .@time = gettimetick(0) - .@start;
    debugmes(sprintf("time used = %0d.%02d ms", .@time/.@iterations, .@time%.@iterations));
 
    .@start = gettimetick(0);
    for (.@i = 0; .@i < .@iterations; ++.@i)
        callfunc "modern_fisher_yates_haru", .@samplesize, .@output;
    .@time = gettimetick(0) - .@start;
    debugmes(sprintf("time used = %0d.%02d ms", .@time/.@iterations, .@time%.@iterations));
    end;
}
 
function    script  Haru_shuffle    {
    deletearray getarg(1);
    .@count = getarg(0);
    for ( .@i = 0; .@i < .@count; ++.@i ) {
        do {
            .@pick = rand( .@count );
        } while ( .@flags[.@pick] );
        set getelementofarray( getarg(1), .@i ), .@pick;
        .@flags[.@pick] = 1;
    }
    return .@size;
}
 
function    script  keyworld_inf_shuffle    {
    deletearray getarg(1);
    .@count = getarg(0);
    .@tmp$ = "|";
    for ( .@i = 0; .@i < .@count; ++.@i ) {
        while ( compare( .@tmp$, "|" +( .@pick = rand( .@count ) )+ "|" ) );
        set getelementofarray( getarg(1), .@i ), .@pick;
        .@tmp$ += .@pick +"|";
    }
    return .@size;
}
 
function    script  modern_fisher_yates {
    deletearray getarg(1);
    .@size = .@tmpsize = getarg(0);
    if ( .@size <= 0 )
        return 0;
    for ( .@i = 0; .@i < .@size; ++.@i )
        .@array_[.@i] = .@i;
    for ( .@i = 0; .@i < .@size; ++.@i ) {
        .@rand = rand(.@tmpsize);
        set getelementofarray( getarg(1), .@i ), .@array_[.@rand];
        deletearray .@array_[.@rand], 1;
        --.@tmpsize;
    }
    return .@size;
}
 
function    script  modern_fisher_yates_haru    {
    deletearray getarg(1);
    .@size = .@tmpsize = getarg(0);
    if ( .@size <= 0 )
        return 0;
    for ( .@i = 0; .@i < .@size; ++.@i )
        .@array_[.@i] = .@i;
    for ( .@i = 0; .@i < .@size; ++.@i ) {
        .@rand = rand(.@tmpsize);
        set getelementofarray( getarg(1), .@i ), .@array_[.@rand];
        .@array_[.@rand] = .@array_[--.@tmpsize];
    }
    return .@size;
}
 
Viewed 36 times, submitted by Haruna.