From 83c94693ae4a4d84b4c7ec2d265b05120c022eac Mon Sep 17 00:00:00 2001 From: E7-87-83 Date: Mon, 21 Mar 2022 20:58:20 +0800 Subject: Task 1 --- challenge-157/cheok-yin-fung/perl/ch-1.pl | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 challenge-157/cheok-yin-fung/perl/ch-1.pl 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" +); -- cgit