aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-05-06 19:06:05 +0100
committerGitHub <noreply@github.com>2025-05-06 19:06:05 +0100
commit7fa205e276d4f05891701bf769dba9c2e4ecad40 (patch)
treeddc2f231ef4c41887a5b4fe5c9cb1248989dd2fa
parent8155b0e7b32c7918210367d40d14e1bd2aba174b (diff)
parent4a7e6e23bfd82d8e8a03a0bd507e90437e8f158f (diff)
downloadperlweeklychallenge-club-7fa205e276d4f05891701bf769dba9c2e4ecad40.tar.gz
perlweeklychallenge-club-7fa205e276d4f05891701bf769dba9c2e4ecad40.tar.bz2
perlweeklychallenge-club-7fa205e276d4f05891701bf769dba9c2e4ecad40.zip
Merge pull request #11990 from wanderdoc/master
PWC 320 solutions (wanderdoc)
-rw-r--r--challenge-320/wanderdoc/perl/ch-1.pl60
-rw-r--r--challenge-320/wanderdoc/perl/ch-2.pl56
2 files changed, 116 insertions, 0 deletions
diff --git a/challenge-320/wanderdoc/perl/ch-1.pl b/challenge-320/wanderdoc/perl/ch-1.pl
new file mode 100644
index 0000000000..8312b620fb
--- /dev/null
+++ b/challenge-320/wanderdoc/perl/ch-1.pl
@@ -0,0 +1,60 @@
+#!perl
+use strict;
+use warnings FATAL => qw(all);
+
+=prompt
+You are given an array of integers.
+Write a script to return the maximum between the number of positive and negative integers. Zero is neither positive nor negative.
+
+Example 1
+
+Input: @ints = (-3, -2, -1, 1, 2, 3)
+Output: 3
+
+There are 3 positive integers.
+There are 3 negative integers.
+The maximum between 3 and 3 is 3.
+
+
+Example 2
+
+Input: @ints = (-2, -1, 0, 0, 1)
+Output: 2
+
+There are 1 positive integers.
+There are 2 negative integers.
+The maximum between 2 and 1 is 2.
+
+
+Example 3
+
+Input: @ints = (1, 2, 3, 4)
+Output: 4
+
+There are 4 positive integers.
+There are 0 negative integers.
+The maximum between 4 and 0 is 4.
+=cut
+
+
+
+use List::Util qw(max);
+use Test2::V0 -no_srand => 1;
+
+is(max_count(-3, -2, -1, 1, 2, 3), 3, 'Example 1');
+is(max_count(-2, -1, 0, 0, 1), 2, 'Example 2');
+is(max_count(1, 2, 3, 4), 4, 'Example 3');
+done_testing();
+
+
+sub max_count
+{
+ my @arr = @_;
+ my $pos = my $neg = 0;
+ for my $elm ( @arr )
+ {
+ if ($elm > 0) {$pos++;}
+ elsif ($elm < 0 ) {$neg++;}
+ }
+ return max($pos, $neg);
+}
diff --git a/challenge-320/wanderdoc/perl/ch-2.pl b/challenge-320/wanderdoc/perl/ch-2.pl
new file mode 100644
index 0000000000..60b2981356
--- /dev/null
+++ b/challenge-320/wanderdoc/perl/ch-2.pl
@@ -0,0 +1,56 @@
+#!perl
+use strict;
+use warnings FATAL => qw(all);
+
+=prompt
+You are given an array of positive integers.
+Write a script to return the absolute difference between digit sum and element sum of the given array.
+
+Example 1
+
+Input: @ints = (1, 23, 4, 5)
+Output: 18
+
+Element sum: 1 + 23 + 4 + 5 => 33
+Digit sum: 1 + 2 + 3 + 4 + 5 => 15
+Absolute difference: | 33 - 15 | => 18
+
+
+Example 2
+
+Input: @ints = (1, 2, 3, 4, 5)
+Output: 0
+
+Element sum: 1 + 2 + 3 + 4 + 5 => 15
+Digit sum: 1 + 2 + 3 + 4 + 5 => 15
+Absolute difference: | 15 - 15 | => 0
+
+
+Example 3
+
+Input: @ints = (1, 2, 34)
+Output: 27
+
+Element sum: 1 + 2 + 34 => 37
+Digit sum: 1 + 2 + 3 + 4 => 10
+Absolute difference: | 37 - 10 | => 27
+=cut
+
+
+
+use List::Util qw(sum);
+use Test2::V0 -no_srand => 1;
+
+is(sum_difference(1, 23, 4, 5), 18, 'Example 1');
+is(sum_difference(1, 2, 3, 4, 5), 0, 'Example 2');
+is(sum_difference(1, 2, 34), 27, 'Example 3');
+
+done_testing();
+
+sub sum_difference
+{
+ my @arr = @_;
+ my $elm_sum = sum(@arr);
+ my $digit_sum = sum( map { split(//, $_) } @arr );
+ return abs($elm_sum - $digit_sum);
+}