#!/usr/bin/perl use strict; use Statistics::Descriptive; my $stats = Statistics::Descriptive::Full->new(); while (<>) { my @v = split; $stats->add_data(0+$v[-1]); } my $mean = $stats->mean(); my $devi = $stats->standard_deviation(); print "mean=$mean\n"; print "devi=$devi\n"; my @times = $stats->get_data(); sub calc_90_time ($) { my $N = shift; return $N * ($mean + 2*$devi/sqrt($N)); } use List::Util qw(shuffle sum); for my $N (5, 10, 50, 100, 500, 1000, 5000) { my $time = calc_90_time($N); my $n_ok = 0; for (1 .. 1000) { @times = shuffle(@times); my $sum = sum @times[1 .. $N]; $n_ok++ if $sum <= $time; } printf "%4d packages: %4d/1000 = %.1f%\n", $N, $n_ok, 100*$n_ok/1000; }