encapsulate reporting in its how function too

This commit is contained in:
Yanick Champoux 2023-08-26 10:28:29 -04:00
parent 0c3f6949fa
commit 40407e9604

View File

@ -7,7 +7,10 @@ use List::Util qw(sum);
use Text::SimpleTable::AutoWidth; use Text::SimpleTable::AutoWidth;
use WWW::Mechanize (); use WWW::Mechanize ();
use experimental qw/ signatures /;
sub get_mersenne_results() { sub get_mersenne_results() {
# log in to Mersenne.org and get results for the last year # log in to Mersenne.org and get results for the last year
# excluding everything but PHP and DD results # excluding everything but PHP and DD results
@ -39,10 +42,14 @@ sub get_mersenne_results() {
my $ts = get_mersenne_results(); my $ts = get_mersenne_results();
# group GHZ Days results by computer, compute GHZ Days per Day (GHZ Days / Days) generate_output_table($ts)->draw;
my $list;
foreach my $row ( $ts->rows ) { sub generate_output_table ($ts) {
# group GHZ Days results by computer, compute GHZ Days per Day (GHZ Days / Days)
my $list;
foreach my $row ( $ts->rows ) {
foreach my $cell ($row) { foreach my $cell ($row) {
my $machine = @$cell[0]; my $machine = @$cell[0];
my $ghz_days = @$cell[6]; my $ghz_days = @$cell[6];
@ -55,22 +62,21 @@ foreach my $row ( $ts->rows ) {
push( @{ $list->{$machine} }, $perf ); push( @{ $list->{$machine} }, $perf );
} }
} }
} }
# create hash with each comptuer and its average GHz Days per day # create hash with each comptuer and its average GHz Days per day
my %ranks; my %ranks;
foreach my $key ( keys %$list ) { foreach my $key ( keys %$list ) {
my $mean = sum( @{ $list->{$key} } ) / @{ $list->{$key} }; my $mean = sum( @{ $list->{$key} } ) / @{ $list->{$key} };
my $rounded = int( $mean + 0.5 ); my $rounded = int( $mean + 0.5 );
$ranks{$key} = $rounded; $ranks{$key} = $rounded;
} }
# sort hash by the average and print to screen # sort hash by the average and print to screen
my $tbl = return Text::SimpleTable::AutoWidth->new(
Text::SimpleTable::AutoWidth->new(
captions => [qw/ Computer GHZDaysPerDay /] ); captions => [qw/ Computer GHZDaysPerDay /] );
foreach my $key ( reverse sort { $ranks{$a} <=> $ranks{$b} } keys(%ranks) ) { foreach
my $key ( reverse sort { $ranks{$a} <=> $ranks{$b} } keys(%ranks) ) {
$tbl->row( $key, $ranks{$key} ); $tbl->row( $key, $ranks{$key} );
}
} }
say $tbl->draw();