diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-02-27 11:26:01 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-27 11:26:01 +0000 |
| commit | a77f98e64ec4818f4d4119e0c5856d990fc4c3cf (patch) | |
| tree | b4e777c709708ea835344798a77ccd6f06c70ec1 | |
| parent | 3bb6c2cffade03ec07557dfeadace1b8ae3b08dc (diff) | |
| parent | 9d86cacc92e5e939a5a45d8e38a70b68169a7177 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-258/peter-campbell-smith/perl/ch-1.pl | 24 | ||||
| -rwxr-xr-x | challenge-258/peter-campbell-smith/perl/ch-2.pl | 43 |
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) : ''); +} |
