diff options
| author | Peter Campbell Smith <pj.campbell.smith@gmail.com> | 2024-03-25 14:10:36 +0000 |
|---|---|---|
| committer | Peter Campbell Smith <pj.campbell.smith@gmail.com> | 2024-03-25 14:10:36 +0000 |
| commit | d3f2a1eafbdd48c46d22250ef2db7d8d4e3fcce5 (patch) | |
| tree | e5361d59bc549c9750bf9f259313692d2b3696f6 /challenge-262 | |
| parent | 041fe9129e3ef4d86df461a0feeee1b3740d5758 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-262/peter-campbell-smith/perl/ch-1.pl | 39 | ||||
| -rwxr-xr-x | challenge-262/peter-campbell-smith/perl/ch-2.pl | 53 |
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]; +} |
