aboutsummaryrefslogtreecommitdiff
path: root/challenge-262
diff options
context:
space:
mode:
authorPeter Campbell Smith <pj.campbell.smith@gmail.com>2024-03-25 14:10:36 +0000
committerPeter Campbell Smith <pj.campbell.smith@gmail.com>2024-03-25 14:10:36 +0000
commitd3f2a1eafbdd48c46d22250ef2db7d8d4e3fcce5 (patch)
treee5361d59bc549c9750bf9f259313692d2b3696f6 /challenge-262
parent041fe9129e3ef4d86df461a0feeee1b3740d5758 (diff)
downloadperlweeklychallenge-club-d3f2a1eafbdd48c46d22250ef2db7d8d4e3fcce5.tar.gz
perlweeklychallenge-club-d3f2a1eafbdd48c46d22250ef2db7d8d4e3fcce5.tar.bz2
perlweeklychallenge-club-d3f2a1eafbdd48c46d22250ef2db7d8d4e3fcce5.zip
Week 262
Diffstat (limited to 'challenge-262')
-rw-r--r--challenge-262/peter-campbell-smith/blog.txt1
-rwxr-xr-xchallenge-262/peter-campbell-smith/perl/ch-1.pl39
-rwxr-xr-xchallenge-262/peter-campbell-smith/perl/ch-2.pl53
3 files changed, 93 insertions, 0 deletions
diff --git a/challenge-262/peter-campbell-smith/blog.txt b/challenge-262/peter-campbell-smith/blog.txt
new file mode 100644
index 0000000000..372ae6eb8d
--- /dev/null
+++ b/challenge-262/peter-campbell-smith/blog.txt
@@ -0,0 +1 @@
+http://ccgi.campbellsmiths.force9.co.uk/challenge/262
diff --git a/challenge-262/peter-campbell-smith/perl/ch-1.pl b/challenge-262/peter-campbell-smith/perl/ch-1.pl
new file mode 100755
index 0000000000..7570518f17
--- /dev/null
+++ b/challenge-262/peter-campbell-smith/perl/ch-1.pl
@@ -0,0 +1,39 @@
+#!/usr/bin/perl
+
+# Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge
+
+use v5.26; # The Weekly Challenge - 2024-03-25
+use utf8; # Week 262 - task 1 - Max positive negative
+use warnings; # Peter Campbell Smith
+binmode STDOUT, ':utf8';
+
+my (@ints, $j, $num);
+
+max_positive_negative(-3, 1, 2, -1, 3, -2, 4);
+max_positive_negative(-1, -2, -3, 1);
+max_positive_negative(1, 2);
+
+# larger example
+$j = 0;
+while ($j < 100) {
+ $num = int(rand(100)) - 50;
+ $ints[$j ++] = $num if $num;
+}
+max_positive_negative(@ints);
+
+sub max_positive_negative {
+
+ my (@ints, @count);
+
+ # initialise
+ @ints = @_;
+ @count = (0, 0);
+
+ # count positive and negative values
+ $count[$_ < 0 ? 0 : 1] ++ for @ints;
+
+ # show result
+ say qq[\nInput: \@ints = (] . join(', ', @ints) . q[)];
+ say qq[Output: ] . ($count[0] > $count[1] ? $count[0] : $count[1]) .
+ qq[ ($count[0] negative, $count[1] positive)];
+}
diff --git a/challenge-262/peter-campbell-smith/perl/ch-2.pl b/challenge-262/peter-campbell-smith/perl/ch-2.pl
new file mode 100755
index 0000000000..bd402d157b
--- /dev/null
+++ b/challenge-262/peter-campbell-smith/perl/ch-2.pl
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+
+# Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge
+
+use v5.26; # The Weekly Challenge - 2024-03-25
+use utf8; # Week 262 - task 2 - Count equal divisible
+use warnings; # Peter Campbell Smith
+binmode STDOUT, ':utf8';
+
+my (@ints, $j);
+
+count_equal_divisible([3, 1, 2, 2, 2, 1, 3], 2);
+count_equal_divisible([1, 2, 3], 1);
+
+# bigger example
+for $j (0 .. 99) {
+ push @ints, int(rand(50) + 1);
+}
+count_equal_divisible(\@ints, 23);
+
+sub count_equal_divisible {
+
+ my (@ints, $i, $j, $ij, $k, $count, $explain);
+
+ # initialise
+ @ints = @{$_[0]};
+ $k = $_[1];
+ $count = 0;
+ $explain = '';
+
+ # loop over all pairs where $j > $i
+ for $i (0 .. @ints - 2) {
+ for $j ($i + 1 .. @ints - 1) {
+
+ # discard unless values are equal
+ next unless $ints[$i] == $ints[$j];
+
+ # discard unless $i * $j is a multiple of $k
+ $ij = $i * $j;
+ next unless $ij / $k == int($ij / $k);
+
+ # found an answer
+ $count ++;
+ $explain .= qq[$i * $j = $ij, ];
+ }
+ }
+
+ # show results
+ say qq[\nInput: \@ints = (] . join(', ', @ints) .
+ qq[), \$k = $k];
+ $explain =~ s|(.*)..$|($1)|;
+ say qq[Output: $count $explain];
+}