Code:
#!perl
use strict;
use Math::Random::MT;
# Mersenne Twister module available from CPAN
# http://search.cpan.org/~ams/Math-Random-MT-1.11/MT.pm
# requires Perl 5.10.0 or higher
use constant SIZE => 15;
use constant TRIALS => 10_000_000;
my (@movs, $rand_gen, $sum_r, );
BEGIN {
warn "Seeding random number generator.\n";
require LWP::Simple;
my $RAND_URL=\("http://random.org/integers/?num=1248&min=0&max=65535&col=2&base=10&format=plain&rnd=new");
my (@seed);
foreach (split(/\n/, LWP::Simple::get($$RAND_URL))) {
m/^([0-9]+)\s+([0-9]+)$/;
push @seed, $1 + $2*2**16;
}
$rand_gen = Math::Random::MT->new(@seed);
warn "Random number generator seeded.\n";
}
while(<>) {
next unless m/^[12][0-9]{7}/;
chomp;
my($date, $away, $home, $mov,) =split;
push @movs, $mov;
}
for(my $i=1; $i<=TRIALS; $i++) {
my $selected = {};
my $sum = 0;
warn "TRIAL# $i\n" unless $i % 10_000;
for (my $j=0; $j < SIZE; $j++) {
my $r = int($rand_gen->rand($#movs + 1));
redo if $selected->{$r};
$selected->{$r} = 1;
$sum += $movs[$r];
}
$sum_r->{$sum}++;
}
foreach my $sum (sort {$a <=> $b} keys %{ $sum_r } ) {
print "$sum\t$sum_r->{$sum}\n";
}