diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-02-27 11:49:16 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-27 11:49:16 +0000 |
| commit | c8028cbd6b258a3056e16f5c9d97cede5a59b126 (patch) | |
| tree | 6ae9eb87da5f7178e28ccbd1f8b06e7b49f7d701 | |
| parent | e7c876d268f8c63957c94b2796a02e1a0fd97f7f (diff) | |
| parent | 7e993cc9323fd7b07153e60ff9cda44a77bbd46f (diff) | |
| download | perlweeklychallenge-club-c8028cbd6b258a3056e16f5c9d97cede5a59b126.tar.gz perlweeklychallenge-club-c8028cbd6b258a3056e16f5c9d97cede5a59b126.tar.bz2 perlweeklychallenge-club-c8028cbd6b258a3056e16f5c9d97cede5a59b126.zip | |
Merge pull request #9662 from mattneleigh/pwc258
new file: challenge-258/mattneleigh/perl/ch-1.pl
| -rwxr-xr-x | challenge-258/mattneleigh/perl/ch-1.pl | 59 | ||||
| -rwxr-xr-x | challenge-258/mattneleigh/perl/ch-2.pl | 86 |
2 files changed, 145 insertions, 0 deletions
diff --git a/challenge-258/mattneleigh/perl/ch-1.pl b/challenge-258/mattneleigh/perl/ch-1.pl new file mode 100755 index 0000000000..d3c979e846 --- /dev/null +++ b/challenge-258/mattneleigh/perl/ch-1.pl @@ -0,0 +1,59 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use English; + +################################################################################ +# Begin main execution +################################################################################ + +my @integer_lists = ( + [ 10, 1, 111, 24, 1000 ], + [ 111, 1, 11111 ], + [ 2, 8, 1024, 256 ] +); + +print("\n"); +foreach my $integer_list (@integer_lists){ + printf( + "Input: \@ints = (%s)\nOutput: %d\n\n", + join(", ", @{$integer_list}), + count_ints_with_even_digits(@{$integer_list}) + ); +} + +exit(0); +################################################################################ +# End main execution; subroutines follow +################################################################################ + + + +################################################################################ +# Given a list of integers, determine how many have an even number of digits +# Takes one argument: +# * A list of integers to examine +# Returns +# * The count of integers that have an even number of digits +################################################################################ +sub count_ints_with_even_digits{ + + my $count = 0; + + foreach my $integer (@ARG){ + # Remove anything that isn't a digit + $integer =~ s/\D//g; + + # Increment the count unless the number of + # digits is odd + $count++ + unless(length($integer) % 2); + } + + return($count); + +} + + + diff --git a/challenge-258/mattneleigh/perl/ch-2.pl b/challenge-258/mattneleigh/perl/ch-2.pl new file mode 100755 index 0000000000..9ceff07fee --- /dev/null +++ b/challenge-258/mattneleigh/perl/ch-2.pl @@ -0,0 +1,86 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use English; + +################################################################################ +# Begin main execution +################################################################################ + +my @things = ( + [ + [ 2, 5, 9, 11, 3 ], + 1 + ], + [ + [ 2, 5, 9, 11, 3 ], + 2 + ], + [ + [ 2, 5, 9, 11, 3 ], + 0 + ] +); + +print("\n"); +foreach my $thing (@things){ + printf( + "Input: \@ints = (%s)\n \$k = %d\nOutput: %d\n\n", + join(", ", @{$thing->[0]}), + $thing->[1], + sum_elements_with_particularly_positive_indices( + $thing->[1], + @{$thing->[0]} + ) + ); +} + +exit(0); +################################################################################ +# End main execution; subroutines follow +################################################################################ + + + +################################################################################ +# Given an array of integers, sum the elements whose indices within the array +# have a specific number of ones in their binary representation +# Takes two arguments: +# * The desired number of ones in array indices (e.g. 1 ) +# * An array of integers (e.g. ( 2, 5, 9, 11, 3 ) ) +# Returns: +# * The sum of the integers from the array whose indices have the desired +# quantity of ones (e.g. 17 (which is 5 + 9 + 3)) +################################################################################ +sub sum_elements_with_particularly_positive_indices{ + my $desired_ones = shift(); + + my $index_value; + my $ones; + my $sum = 0; + + for my $index (0 .. $#ARG){ + $index_value = $index; + $ones = 0; + + # Count the number of ones in this index value + while($index_value){ + $ones++ + if($index_value & 0x01); + $index_value >>= 1; + } + + # If this index had the number of ones we're + # looking for, add the array value at this + # index to the sum + $sum += $ARG[$index] + if($ones == $desired_ones); + } + + return($sum); + +} + + + |
