#!/usr/bin/perl use strict; use warnings; use Storable; use Statistics::Descriptive; my @grid = @{ retrieve('grid.dat') }; my %param = %{ retrieve('param.dat') }; # range_contx and range_conty parameters my @contaminated_walks; for (1 .. 100) { my $steps = 100; my $num_walks = 100; my ($x, $y) = (int(rand $param{range_contx}), int(rand $param{range_conty})); my @walks; for (1 .. $num_walks) { my $infected; #Inner loop to perform each step of a random walk for (1 .. $steps) { my $random_num = rand; my $steps = (1 + int( rand 6 )); if($random_num < 0.25) { $x = ($x - $steps) % $param{range_contx}; } elsif ($random_num < 0.5) { $x = ($x + $steps) % $param{range_contx}; } elsif ($random_num < 0.75) { $y = ($y - $steps) % $param{range_conty}; } else { $y = ($y + $steps) % $param{range_conty}; } $infected += $grid[$x][$y] || 0; } push @walks, $infected; } push @contaminated_walks, scalar grep $_, @walks; } my $stat = Statistics::Descriptive::Sparse->new(); $stat->add_data(@contaminated_walks); printf "mean: %.f std. deviation: %.f count: %d\n", $stat->mean, $stat->standard_deviation, $stat->count; __END__ C:\Old_Data\perlp>perl his_stat.pl mean: 60 std. deviation: 5 count: 100