diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-10-19 15:44:39 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-19 15:44:39 +0100 |
| commit | 34cc3b86b1c126090a4e4bae9ddbba6846c5d4a9 (patch) | |
| tree | 6a49a968cc552df39e234760ab2c8f7f8094889a | |
| parent | fa7ab4705568b7911e0e59ace8ebda790696d7f7 (diff) | |
| parent | 28e90848bc89347fb3e0bf6d2dbeaca3022ff994 (diff) | |
| download | perlweeklychallenge-club-34cc3b86b1c126090a4e4bae9ddbba6846c5d4a9.tar.gz perlweeklychallenge-club-34cc3b86b1c126090a4e4bae9ddbba6846c5d4a9.tar.bz2 perlweeklychallenge-club-34cc3b86b1c126090a4e4bae9ddbba6846c5d4a9.zip | |
Merge pull request #12868 from rjt-pl/master
rjt's week 343 solutions and blog
| -rw-r--r-- | challenge-343/ryan-thompson/README.md | 8 | ||||
| -rw-r--r-- | challenge-343/ryan-thompson/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-343/ryan-thompson/perl/ch-1.pl | 6 | ||||
| -rw-r--r-- | challenge-343/ryan-thompson/perl/ch-2.pl | 10 | ||||
| -rw-r--r-- | challenge-343/ryan-thompson/perl/ch-2a.pl | 51 | ||||
| -rw-r--r-- | challenge-343/ryan-thompson/perl/t/ch-1.t | 12 | ||||
| -rw-r--r-- | challenge-343/ryan-thompson/perl/t/ch-2.t | 29 |
7 files changed, 113 insertions, 4 deletions
diff --git a/challenge-343/ryan-thompson/README.md b/challenge-343/ryan-thompson/README.md index ec7aeb0f5f..2d781de9ed 100644 --- a/challenge-343/ryan-thompson/README.md +++ b/challenge-343/ryan-thompson/README.md @@ -1,18 +1,18 @@ # Ryan Thompson -## Week 342 Solutions +## Week 343 Solutions -### Task 1 › Balanced Strings +### Task 1 › Zero Friend * [Perl](perl/ch-1.pl) -### Task 2 › Max Score +### Task 2 › Champion Team * [Perl](perl/ch-2.pl) ## Blog - * [Perfectly Balanced and Pointlessly Optimized](https://ry.ca/2025/10/pwc-342-balanced-optimized/) + * [It's hard to make friends when you're a zero](https://ry.ca/2025/10/pwc-343-its-hard-to-make-friends/) ## Tests diff --git a/challenge-343/ryan-thompson/blog.txt b/challenge-343/ryan-thompson/blog.txt new file mode 100644 index 0000000000..3dad97d295 --- /dev/null +++ b/challenge-343/ryan-thompson/blog.txt @@ -0,0 +1 @@ +https://ry.ca/2025/10/pwc-343-its-hard-to-make-friends/ diff --git a/challenge-343/ryan-thompson/perl/ch-1.pl b/challenge-343/ryan-thompson/perl/ch-1.pl new file mode 100644 index 0000000000..f41f26fd09 --- /dev/null +++ b/challenge-343/ryan-thompson/perl/ch-1.pl @@ -0,0 +1,6 @@ +#!/usr/bin/env perl + +use v5.38; +use List::Util qw< min >; + +sub zero_friend { min map abs, @_ } diff --git a/challenge-343/ryan-thompson/perl/ch-2.pl b/challenge-343/ryan-thompson/perl/ch-2.pl new file mode 100644 index 0000000000..bb72c3008e --- /dev/null +++ b/challenge-343/ryan-thompson/perl/ch-2.pl @@ -0,0 +1,10 @@ +#!/usr/bin/env perl + +use v5.38; +use List::Util qw< sum max reduce >; + +sub best { + my ($bs,$bi,$s) = (0,0); + ($s = sum $_[$_]->@*) > $bs and ($bs,$bi)=($s,$_) for 0..$#_; + $bi; +} diff --git a/challenge-343/ryan-thompson/perl/ch-2a.pl b/challenge-343/ryan-thompson/perl/ch-2a.pl new file mode 100644 index 0000000000..b1ed5b2d77 --- /dev/null +++ b/challenge-343/ryan-thompson/perl/ch-2a.pl @@ -0,0 +1,51 @@ +#!/usr/bin/env perl +# +# ch-2a.pl - Alternate solutions (see blog) + +use v5.38; +use List::Util qw< sum max reduce >; + +sub reduce1 { + (reduce { $a->[1] > $b->[1] ? $a : $b } + map { [ $_ => sum @{$_[$_]} ] } keys @_)->[0]; +} + +sub reduce2 { + my @teams = map { sum @$_ } @_; + reduce { $teams[$a] > $teams[$b] ? $a : $b } keys @_; +} + +sub hash_ { + my %vals = map { sum(@{$_[$_]}) => $_ } keys @_; + $vals{ max keys %vals } +} + +sub loop { + my @best = (0,0); + for (keys @_) { + my $sum = sum $_[$_]->@*; + @best = ($sum, $_) if $sum > $best[0]; + } + $best[1]; +} + + +# Benchmark them if --bench is given +if ($ARGV[0] and $ARGV[0] =~ /^--bench(mark)?$/) { + require './ch-2.pl'; + use Benchmark qw< cmpthese >; + + my @grid = ([0,0,0,0,0], + [1,0,0,0,0], + [1,1,0,1,1], + [1,1,0,0,0], + [1,1,0,1,0]); + + cmpthese(-3, { + reduce1 => sub { reduce1(@grid) }, + reduce2 => sub { reduce2(@grid) }, + hash => sub { hash_(@grid) }, + loop => sub { loop(@grid) }, + best => sub { best(@grid) }, + }); +} diff --git a/challenge-343/ryan-thompson/perl/t/ch-1.t b/challenge-343/ryan-thompson/perl/t/ch-1.t new file mode 100644 index 0000000000..ea3212b47f --- /dev/null +++ b/challenge-343/ryan-thompson/perl/t/ch-1.t @@ -0,0 +1,12 @@ +use Test2::V0; + +require './ch-1.pl'; + +is zero_friend(4,2,-1,3,-2), 1; +is zero_friend(-5,5,-3,3,-1,1), 1; +is zero_friend(7,-3,0,2,8), 0; +is zero_friend(-2,-5,-1,-8), 1; +is zero_friend(-2,2,-4,4,-1,1), 1; +is zero_friend(2,-2,4,-4,1,-1), 1; + +done_testing; diff --git a/challenge-343/ryan-thompson/perl/t/ch-2.t b/challenge-343/ryan-thompson/perl/t/ch-2.t new file mode 100644 index 0000000000..1be8d09383 --- /dev/null +++ b/challenge-343/ryan-thompson/perl/t/ch-2.t @@ -0,0 +1,29 @@ +use Test2::V0; + +require './ch-2.pl'; + +is best([0, 1, 1], + [0, 0, 1], + [0, 0, 0]), 0; + +is best([0, 1, 0, 0], + [0, 0, 0, 0], + [1, 1, 0, 0], + [1, 1, 1, 0]), 3; + +is best([0, 1, 0, 1], + [0, 0, 1, 1], + [1, 0, 0, 0], + [0, 0, 1, 0]), 0; + +is best([0, 1, 1], + [0, 0, 0], + [0, 1, 0]), 0; + +is best([0, 0, 0, 0, 0], + [1, 0, 0, 0, 0], + [1, 1, 0, 1, 1], + [1, 1, 0, 0, 0], + [1, 1, 0, 1, 0]), 2; + +done_testing; |
