diff options
| author | CY Fung <fungcheokyin@gmail.com> | 2023-06-26 05:12:56 +0800 |
|---|---|---|
| committer | CY Fung <fungcheokyin@gmail.com> | 2023-06-26 05:12:56 +0800 |
| commit | 73d8b4a974d56b01963294e8c3c775dec7e46bbd (patch) | |
| tree | ca04c67c1796b8c4fb9e66c6f1adaf8bb58863da | |
| parent | 15fcbedb28557e5afbb44a6c8404f65b84c9f61c (diff) | |
| download | perlweeklychallenge-club-73d8b4a974d56b01963294e8c3c775dec7e46bbd.tar.gz perlweeklychallenge-club-73d8b4a974d56b01963294e8c3c775dec7e46bbd.tar.bz2 perlweeklychallenge-club-73d8b4a974d56b01963294e8c3c775dec7e46bbd.zip | |
Week 222
| -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; |
