diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-09-14 23:41:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-14 23:41:13 +0100 |
| commit | 652e42b40b5f364131a6e56757ac70e71e580b72 (patch) | |
| tree | ee82a40a15c6dafb009f7a018caf10367fdb1017 | |
| parent | 07eb8b3496b18f957496a9b228d735d067b3859e (diff) | |
| parent | ae8e86a42e5e892975c71f16e593d64dbc078841 (diff) | |
| download | perlweeklychallenge-club-652e42b40b5f364131a6e56757ac70e71e580b72.tar.gz perlweeklychallenge-club-652e42b40b5f364131a6e56757ac70e71e580b72.tar.bz2 perlweeklychallenge-club-652e42b40b5f364131a6e56757ac70e71e580b72.zip | |
Merge pull request #12672 from wanderdoc/master
PWC 338 (wanderdoc)
| -rw-r--r-- | challenge-338/wanderdoc/perl/ch-1.pl | 68 | ||||
| -rw-r--r-- | challenge-338/wanderdoc/perl/ch-2.pl | 194 |
2 files changed, 262 insertions, 0 deletions
diff --git a/challenge-338/wanderdoc/perl/ch-1.pl b/challenge-338/wanderdoc/perl/ch-1.pl new file mode 100644 index 0000000000..913cd45886 --- /dev/null +++ b/challenge-338/wanderdoc/perl/ch-1.pl @@ -0,0 +1,68 @@ +#!perl +use strict; +use warnings FATAL => qw(all); + +=prompt +You are given a m x n matrix. +Write a script to find the highest row sum in the given matrix. +Example 1 +Input: @matrix = ([4, 4, 4, 4], + [10, 0, 0, 0], + [2, 2, 2, 9]) +Output: 16 + +Row 1: 4 + 4 + 4 + 4 => 16 +Row 2: 10 + 0 + 0 + 0 => 10 +Row 3: 2 + 2 + 2 + 9 => 15 + + +Example 2 + +Input: @matrix = ([1, 5], + [7, 3], + [3, 5]) +Output: 10 + + +Example 3 + +Input: @matrix = ([1, 2, 3], + [3, 2, 1]) +Output: 6 + + +Example 4 + +Input: @matrix = ([2, 8, 7], + [7, 1, 3], + [1, 9, 5]) +Output: 17 + + +Example 5 + +Input: @matrix = ([10, 20, 30], + [5, 5, 5], + [0, 100, 0], + [25, 25, 25]) +Output: 100 + +=cut + +use PDL; # Run with strawberry-perl-5.40.0.1-64bit-PDL +use Test2::V0 -no_srand => 1; + +is(max_row([[4, 4, 4, 4], [10, 0, 0, 0], [2, 2, 2, 9]]), 16, 'Example 1'); +is(max_row([[1, 5], [7, 3], [3, 5]]), 10, 'Example 2'); +is(max_row([[1, 2, 3], [3, 2, 1]]), 6, 'Example 3'); +is(max_row([[2, 8, 7], [7, 1, 3], [1, 9, 5]]), 17, 'Example 4'); +is(max_row([[10, 20, 30], [5, 5, 5], [0, 100, 0], [25, 25, 25]]), 100, 'Example 5'); +done_testing; + +sub max_row +{ + my $mtr = $_[0]; + my $pdl = pdl @$mtr; # print $pdl->transpose; (for sum on columns) + my $sums = sumover $pdl; + return $sums->maximum; +} diff --git a/challenge-338/wanderdoc/perl/ch-2.pl b/challenge-338/wanderdoc/perl/ch-2.pl new file mode 100644 index 0000000000..ea2315fb26 --- /dev/null +++ b/challenge-338/wanderdoc/perl/ch-2.pl @@ -0,0 +1,194 @@ +#!perl +use strict; +use warnings FATAL => qw(all); + +=prompt +You are given two integer arrays, @arr1 and @arr2. +Write a script to find the maximum difference between any pair of values from both arrays. +Example 1 + +Input: @arr1 = (4, 5, 7) + @arr2 = (9, 1, 3, 4) +Output: 6 + +With element $arr1[0] = 4 +| 4 - 9 | = 5 +| 4 - 1 | = 3 +| 4 - 3 | = 1 +| 4 - 4 | = 0 +max distance = 5 + +With element $arr1[1] = 5 +| 5 - 9 | = 4 +| 5 - 1 | = 4 +| 5 - 3 | = 2 +| 5 - 4 | = 1 +max distance = 4 + +With element $arr1[2] = 7 +| 7 - 9 | = 2 +| 7 - 1 | = 6 +| 7 - 3 | = 4 +| 7 - 4 | = 4 +max distance = 6 + +max (5, 6, 6) = 6 + + +Example 2 + +Input: @arr1 = (2, 3, 5, 4) + @arr2 = (3, 2, 5, 5, 8, 7) +Output: 6 + +With element $arr1[0] = 2 +| 2 - 3 | = 1 +| 2 - 2 | = 0 +| 2 - 5 | = 3 +| 2 - 5 | = 3 +| 2 - 8 | = 6 +| 2 - 7 | = 5 +max distance = 6 + +With element $arr1[1] = 3 +| 3 - 3 | = 0 +| 3 - 2 | = 1 +| 3 - 5 | = 2 +| 3 - 5 | = 2 +| 3 - 8 | = 5 +| 3 - 7 | = 4 +max distance = 5 + +With element $arr1[2] = 5 +| 5 - 3 | = 2 +| 5 - 2 | = 3 +| 5 - 5 | = 0 +| 5 - 5 | = 0 +| 5 - 8 | = 3 +| 5 - 7 | = 2 +max distance = 3 + +With element $arr1[3] = 4 +| 4 - 3 | = 1 +| 4 - 2 | = 2 +| 4 - 5 | = 1 +| 4 - 5 | = 1 +| 4 - 8 | = 4 +| 4 - 7 | = 3 +max distance = 4 + +max (5, 6, 3, 4) = 6 + + +Example 3 + +Input: @arr1 = (2, 1, 11, 3) + @arr2 = (2, 5, 10, 2) +Output: 9 + +With element $arr1[0] = 2 +| 2 - 2 | = 0 +| 2 - 5 | = 3 +| 2 - 10 | = 8 +| 2 - 2 | = 0 +max distance = 8 + +With element $arr1[1] = 1 +| 1 - 2 | = 1 +| 1 - 5 | = 4 +| 1 - 10 | = 9 +| 1 - 2 | = 1 +max distance = 9 + +With element $arr1[2] = 11 +| 11 - 2 | = 9 +| 11 - 5 | = 6 +| 11 - 10 | = 1 +| 11 - 2 | = 9 +max distance = 9 + +With element $arr1[3] = 3 +| 3 - 2 | = 1 +| 3 - 5 | = 2 +| 3 - 10 | = 7 +| 3 - 2 | = 1 +max distance = 7 + +max (8, 9, 9, 7) = 9 + + +Example 4 + +Input: @arr1 = (1, 2, 3) + @arr2 = (3, 2, 1) +Output: 2 + +With element $arr1[0] = 1 +| 1 - 3 | = 2 +| 1 - 2 | = 1 +| 1 - 1 | = 0 +max distance = 2 + +With element $arr1[1] = 2 +| 2 - 3 | = 1 +| 2 - 2 | = 0 +| 2 - 1 | = 1 +max distance = 1 + +With element $arr1[2] = 3 +| 3 - 3 | = 0 +| 3 - 2 | = 1 +| 3 - 1 | = 2 +max distance = 2 + +max (2, 1, 2) = 2 + + +Example 5 + +Input: @arr1 = (1, 0, 2, 3) + @arr2 = (5, 0) +Output: 5 + +With element $arr1[0] = 1 +| 1 - 5 | = 4 +| 1 - 0 | = 1 +max distance = 4 + +With element $arr1[1] = 0 +| 0 - 5 | = 5 +| 0 - 0 | = 0 +max distance = 5 + +With element $arr1[2] = 2 +| 2 - 5 | = 3 +| 2 - 0 | = 2 +max distance = 3 + +With element $arr1[3] = 3 +| 3 - 5 | = 2 +| 3 - 0 | = 3 +max distance = 3 + +max (4, 5, 3, 3) = 5 + +=cut + +use Test2::V0 -no_srand => 1; +use List::Util qw(max); + +is(max_distance([4, 5, 7], [9, 1, 3, 4]), 6, 'Example 1'); +is(max_distance([2, 3, 5, 4], [3, 2, 5, 5, 8, 7]), 6, 'Example 2'); +is(max_distance([2, 1, 11, 3], [2, 5, 10, 2]), 9, 'Example 3'); +is(max_distance([1, 2, 3], [3, 2, 1]), 2, 'Example 4'); +is(max_distance([1, 0, 2, 3], [5, 0]), 5, 'Example 5'); +done_testing(); + +sub max_distance +{ + my ($aref_1, $aref_2) = @_; + my @limits_1 = (sort { $a <=> $b } @$aref_1)[0, -1]; + my @limits_2 = (sort { $a <=> $b } @$aref_2)[0, -1]; + return max( abs($limits_1[0] - $limits_2[1]), + abs($limits_1[1] - $limits_2[0])); +} |
