diff options
| -rw-r--r-- | challenge-222/cheok-yin-fung/perl/ch-1.pl | 20 | ||||
| -rw-r--r-- | challenge-222/cheok-yin-fung/perl/ch-2.pl | 26 |
2 files changed, 46 insertions, 0 deletions
diff --git a/challenge-222/cheok-yin-fung/perl/ch-1.pl b/challenge-222/cheok-yin-fung/perl/ch-1.pl new file mode 100644 index 0000000000..2677bc3b45 --- /dev/null +++ b/challenge-222/cheok-yin-fung/perl/ch-1.pl @@ -0,0 +1,20 @@ +# The Weekly Challenge 222 +# Task 1 Matching Members +use v5.30.0; +use warnings; +use List::Util qw/zip/; + +sub mm { + my @arr = @_; + my @brr = sort {$a <=> $b} @arr; + my $ans = grep {$_ == 1} map {$_->[0] == $_->[1]} zip [@arr], [@brr]; + return $ans; +} + + +use Test::More tests=>3; +ok mm(1, 1, 4, 2, 1, 3) == 3; +ok mm(5, 1, 2, 3, 4) == 0; +ok mm(1, 2, 3, 4, 5) == 5; + + diff --git a/challenge-222/cheok-yin-fung/perl/ch-2.pl b/challenge-222/cheok-yin-fung/perl/ch-2.pl new file mode 100644 index 0000000000..1349a45860 --- /dev/null +++ b/challenge-222/cheok-yin-fung/perl/ch-2.pl @@ -0,0 +1,26 @@ +# The Weekly Challenge +# Task 2 Last Member +use v5.30.0; +use warnings; +use List::Util qw/max first/; + +sub lm { + my @arr = @_; + while (scalar @arr > 1) { + my $m = max @arr; + my $ind = first {$arr[$_] == $m} 0..$#arr; + my @brr = map {$arr[$_]} grep {$_ != $ind} 0..$#arr; + my $n = max @brr; + my $jnd = first {$brr[$_] == $n} 0..$#brr; + my @crr = map {$brr[$_]} grep {$_ != $jnd} 0..$#brr; + push @crr, $m-$n if $m != $n; + @arr = @crr; + } + return 0 if scalar @arr == 0; + return $arr[0]; +} + +use Test::More tests=>3; +ok lm(2, 7, 4, 1, 8, 1) == 1; +ok lm(1) == 1; +ok lm(1, 1) == 0; |
