aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-02-27 11:26:01 +0000
committerGitHub <noreply@github.com>2024-02-27 11:26:01 +0000
commita77f98e64ec4818f4d4119e0c5856d990fc4c3cf (patch)
treeb4e777c709708ea835344798a77ccd6f06c70ec1
parent3bb6c2cffade03ec07557dfeadace1b8ae3b08dc (diff)
parent9d86cacc92e5e939a5a45d8e38a70b68169a7177 (diff)
downloadperlweeklychallenge-club-a77f98e64ec4818f4d4119e0c5856d990fc4c3cf.tar.gz
perlweeklychallenge-club-a77f98e64ec4818f4d4119e0c5856d990fc4c3cf.tar.bz2
perlweeklychallenge-club-a77f98e64ec4818f4d4119e0c5856d990fc4c3cf.zip
Merge pull request #9654 from pjcs00/wk258
Week 258
-rw-r--r--challenge-258/peter-campbell-smith/blog.txt1
-rwxr-xr-xchallenge-258/peter-campbell-smith/perl/ch-1.pl24
-rwxr-xr-xchallenge-258/peter-campbell-smith/perl/ch-2.pl43
3 files changed, 68 insertions, 0 deletions
diff --git a/challenge-258/peter-campbell-smith/blog.txt b/challenge-258/peter-campbell-smith/blog.txt
new file mode 100644
index 0000000000..4965f3d1a5
--- /dev/null
+++ b/challenge-258/peter-campbell-smith/blog.txt
@@ -0,0 +1 @@
+http://ccgi.campbellsmiths.force9.co.uk/challenge/258
diff --git a/challenge-258/peter-campbell-smith/perl/ch-1.pl b/challenge-258/peter-campbell-smith/perl/ch-1.pl
new file mode 100755
index 0000000000..185c4163ce
--- /dev/null
+++ b/challenge-258/peter-campbell-smith/perl/ch-1.pl
@@ -0,0 +1,24 @@
+#!/usr/bin/perl
+
+# Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge
+
+use v5.26; # The Weekly Challenge - 2024-02-26
+use utf8; # Week 258 - task 1 - Count even digits number
+use warnings; # Peter Campbell Smith
+binmode STDOUT, ':utf8';
+
+count_even_digits_number (10, 1, 111, 24, 1000);
+count_even_digits_number (111, 1, 11111);
+count_even_digits_number (2, 8, 1024, 256);
+count_even_digits_number (1234567890123456789901234567890,
+ 12345678901234567890, 123456789);
+
+sub count_even_digits_number {
+
+ # count @ints with even length
+ my $count = 0;
+ $count += 1 - (length($_) % 2) for @_;
+
+ say qq[\nInput: (] . join(', ', @_) . ')';
+ say qq[Output: $count];
+}
diff --git a/challenge-258/peter-campbell-smith/perl/ch-2.pl b/challenge-258/peter-campbell-smith/perl/ch-2.pl
new file mode 100755
index 0000000000..9e10eb19f8
--- /dev/null
+++ b/challenge-258/peter-campbell-smith/perl/ch-2.pl
@@ -0,0 +1,43 @@
+#!/usr/bin/perl
+
+# Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge
+
+use v5.26; # The Weekly Challenge - 2024-02-26
+use utf8; # Week 258 - task 2 - Sum of values
+use warnings; # Peter Campbell Smith
+binmode STDOUT, ':utf8';
+
+sum_of_values([2, 5, 9, 11, 3], 1);
+sum_of_values([2, 5, 9, 11, 3], 2);
+sum_of_values([2, 5, 9, 11, 3], 0);
+sum_of_values([2, 5, 9, 11, 3], 3);
+sum_of_values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], 4);
+
+sub sum_of_values {
+
+ my (@ints, $k, $j, $sum, $binary, $bit_count, $explain);
+
+ # initialise
+ @ints = @{$_[0]};
+ $k = $_[1];
+ $sum = 0;
+ $explain = '';
+
+ # loop over @ints
+ for $j (0 .. @ints - 1) {
+
+ # count bits in index
+ $binary = sprintf('%b', $j);
+ $bit_count = eval(join('+', split('', $binary)));
+
+ # accumulate $sum where $j has $k bits set
+ next unless $bit_count == $k;
+ $sum += $ints[$j];
+ $explain .= qq[$j == 0b$binary, ];
+ }
+
+ # show results
+ say qq[\nInput: \@ints = (] . join(', ', @ints) . qq[), \$k = $k];
+ say qq[Output: $sum] .
+ ($explain ? ' ∵ ' . substr($explain, 0, -2) : '');
+}