diff options
| author | E7-87-83 <fungcheokyin@gmail.com> | 2022-03-21 20:58:20 +0800 |
|---|---|---|
| committer | E7-87-83 <fungcheokyin@gmail.com> | 2022-03-21 20:58:20 +0800 |
| commit | 83c94693ae4a4d84b4c7ec2d265b05120c022eac (patch) | |
| tree | 40d3339a5ad89b6d545bfe8b577046de664557d0 | |
| parent | 511f82b397acb52cc795b8be8be4c317bcc700fe (diff) | |
| download | perlweeklychallenge-club-83c94693ae4a4d84b4c7ec2d265b05120c022eac.tar.gz perlweeklychallenge-club-83c94693ae4a4d84b4c7ec2d265b05120c022eac.tar.bz2 perlweeklychallenge-club-83c94693ae4a4d84b4c7ec2d265b05120c022eac.zip | |
Task 1
| -rw-r--r-- | challenge-157/cheok-yin-fung/perl/ch-1.pl | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/challenge-157/cheok-yin-fung/perl/ch-1.pl b/challenge-157/cheok-yin-fung/perl/ch-1.pl new file mode 100644 index 0000000000..bdb01e53a6 --- /dev/null +++ b/challenge-157/cheok-yin-fung/perl/ch-1.pl @@ -0,0 +1,45 @@ +#!/usr/bin/perl +# The Weekly Challenge 157 +# Task 1 Pythagorean Means +use v5.22.0; +use warnings; +use List::Util qw/sum product/; + +if (defined($ARGV[0])) { + my @in = @ARGV; + my %ans = %{mean(@in)}; + say "AM = ", sprintf("%.1f", $ans{a}); + say "GM = ", sprintf("%.1f", $ans{g}); + say "HM = ", sprintf("%.1f", $ans{h}); +} + + + +sub mean { + my @n = @_; + my %mean = ( + "a" => (sum @n) / scalar @n, + "g" => exp(log(product @n)/ scalar @n), + "h" => (scalar @n)/(sum map {1/$_} @n), + ); + return \%mean; +} + + + +use Test::More tests => 3; +is_deeply( + [4.8, 3.8, 2.8], + [sort {$b<=>$a} map {sprintf("%.1f", $_)} values mean(1,3,5,6,9)->%*], + "Example 1" +); +is_deeply( + ["6.0", 5.2, 4.4], + [sort {$b<=>$a} map {sprintf("%.1f", $_)} values mean(2,4,6,8,10)->%*], + "Example 2" +); +is_deeply( + ["3.0", 2.6, 2.2], + [sort {$b<=>$a} map {sprintf("%.1f", $_)} values mean(1,2,3,4,5)->%*], + "Example 3" +); |
