in reply to Re^2: Random data generation.
in thread Random data generation.

BrowserUk,
Yes, there were at least 2 bugs. Try this instead.
#!perl -slw use strict; use List::Util qw/ shuffle /; sub x { my( $N, @M ) = @_; my ($minus_1, $minus_2) = ($M[rand @M], $M[rand @M]); my $str = $minus_1 . $minus_2; for (1 .. $N - 2) { my $idx = rand @M; $idx = ($idx + (int(rand $#M) + 1)) % @M if $minus_1 eq $minus +_2 && $M[$idx] eq $minus_2; $str .= $M[$idx]; ($minus_1, $minus_2) = ($minus_2, $M[$idx]); } return $str; } for( 1 .. 100 ) { my $x = x( 12, qw[ A B C D E F ] ); print $x, $x =~ m[(.)\1\1] ? ' Fail' : ' Ok'; }

Cheers - L~R

Replies are listed 'Best First'.
Re^4: Random data generation.
by BrowserUk (Patriarch) on Jun 27, 2010 at 17:13 UTC

    That works. It runs somewhere in the middle of the pack for performance. X9 is yours below:

    [18:10:14.18] c:\test>junk -I=3 ABCDEF 12 Rate x0 x3 x9 x8 x4 x6 x5 x7 x0 9417/s -- -4% -14% -15% -35% -37% -38% -47% x3 9812/s 4% -- -10% -12% -32% -34% -35% -44% x9 10938/s 16% 11% -- -2% -24% -27% -28% -38% x8 11139/s 18% 14% 2% -- -23% -25% -26% -37% x4 14422/s 53% 47% 32% 29% -- -4% -5% -18% x6 14952/s 59% 52% 37% 34% 4% -- -1% -15% x5 15143/s 61% 54% 38% 36% 5% 1% -- -14% x7 17603/s 87% 79% 61% 58% 22% 18% 16% -- [18:10:32.26] c:\test>junk -I=3 ABCDEF 120 Rate x0 x4 x3 x8 x9 x6 x5 x7 x0 273/s -- -13% -13% -78% -80% -83% -83% -91% x4 312/s 14% -- -1% -75% -77% -81% -81% -89% x3 315/s 15% 1% -- -75% -77% -81% -81% -89% x8 1249/s 358% 300% 297% -- -7% -23% -23% -57% x9 1342/s 392% 330% 327% 7% -- -17% -17% -54% x6 1617/s 493% 418% 414% 30% 21% -- 0% -45% x5 1617/s 493% 418% 414% 30% 21% 0% -- -45% x7 2934/s 976% 841% 833% 135% 119% 81% 81% -- [18:11:00.95] c:\test>junk -I=3 ABCDEF 1200 (warning: too few iterations for a reliable count) Rate x0 x3 x4 x8 x9 x6 x5 x7 x0 3.38/s -- -1% -1% -97% -98% -98% -98% -99% x3 3.42/s 1% -- -0% -97% -98% -98% -98% -99% x4 3.42/s 1% 0% -- -97% -98% -98% -98% -99% x8 124/s 3572% 3525% 3525% -- -13% -24% -24% -61% x9 142/s 4102% 4048% 4048% 14% -- -13% -14% -55% x6 163/s 4735% 4674% 4674% 32% 15% -- -1% -49% x5 164/s 4759% 4698% 4698% 32% 16% 1% -- -48% x7 318/s 9326% 9207% 9207% 157% 124% 95% 94% --