aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Campbell Smith <pj.campbell.smith@gmail.com>2024-01-30 12:59:43 +0000
committerPeter Campbell Smith <pj.campbell.smith@gmail.com>2024-01-30 12:59:43 +0000
commit2ae82099fc663fe51fc5b13efd18f22fa8e0dfd2 (patch)
tree94c2b5d61845be02dab3a19b16c971c17b8a8d8a
parent4099837cf3689e1d78a66905fde9c5a45ff95940 (diff)
downloadperlweeklychallenge-club-2ae82099fc663fe51fc5b13efd18f22fa8e0dfd2.tar.gz
perlweeklychallenge-club-2ae82099fc663fe51fc5b13efd18f22fa8e0dfd2.tar.bz2
perlweeklychallenge-club-2ae82099fc663fe51fc5b13efd18f22fa8e0dfd2.zip
Week 254
-rw-r--r--challenge-254/peter-campbell-smith/blog.txt1
-rwxr-xr-xchallenge-254/peter-campbell-smith/perl/ch-1.pl56
-rwxr-xr-xchallenge-254/peter-campbell-smith/perl/ch-2.pl57
3 files changed, 114 insertions, 0 deletions
diff --git a/challenge-254/peter-campbell-smith/blog.txt b/challenge-254/peter-campbell-smith/blog.txt
new file mode 100644
index 0000000000..b262c241a9
--- /dev/null
+++ b/challenge-254/peter-campbell-smith/blog.txt
@@ -0,0 +1 @@
+http://ccgi.campbellsmiths.force9.co.uk/challenge/254
diff --git a/challenge-254/peter-campbell-smith/perl/ch-1.pl b/challenge-254/peter-campbell-smith/perl/ch-1.pl
new file mode 100755
index 0000000000..199f4bd952
--- /dev/null
+++ b/challenge-254/peter-campbell-smith/perl/ch-1.pl
@@ -0,0 +1,56 @@
+#!/usr/bin/perl
+
+# Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge
+
+use v5.26; # The Weekly Challenge - 2024-01-29
+use utf8; # Week 254 task 1 - Three power
+use strict; # Peter Campbell Smith
+use warnings;
+binmode STDOUT, ':utf8';
+
+three_power(27);
+three_power(0);
+three_power(6);
+three_power(1);
+three_power(1853020188851840);
+three_power(1853020188851841);
+three_power(2197000000000000);
+three_power(205891132094649);
+
+
+sub three_power {
+
+ # initialise
+ my ($n, $j, $try, $limit);
+ $n = shift;
+ say qq[\nInput: $n];
+ if ($n > 2197000000000000) {
+ say qq[-- too big (max is 2197000000000000)];
+ return;
+ }
+
+ # powers of 3
+ $try = 1;
+ for $j (0 .. 33) {
+ if ($try == $n) {
+ say qq[Output: true, $n is 3 ** $j];
+ last;
+ } elsif ($try > $n) {
+ say qq[Output: false, $n is not a power of 3];
+ last;
+ }
+ $try *= 3;
+ }
+
+ # cubes
+ for $j (0 .. 130000) {
+ $try = $j ** 3;
+ if ($try == $n) {
+ say qq[ true, $n is $j ** 3];
+ last;
+ } elsif ($try > $n) {
+ say qq[ false, $n is not a perfect cube];
+ last;
+ }
+ }
+} \ No newline at end of file
diff --git a/challenge-254/peter-campbell-smith/perl/ch-2.pl b/challenge-254/peter-campbell-smith/perl/ch-2.pl
new file mode 100755
index 0000000000..f1cc5cf9b4
--- /dev/null
+++ b/challenge-254/peter-campbell-smith/perl/ch-2.pl
@@ -0,0 +1,57 @@
+#!/usr/bin/perl
+
+# Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge
+
+use v5.26; # The Weekly Challenge - 2024-01-29
+use utf8; # Week 254 task 2 - Reverse vowels
+use strict; # Peter Campbell Smith
+use warnings;
+binmode STDOUT, ':utf8';
+
+reverse_vowels('triumvirate');
+reverse_vowels('bcdf');
+reverse_vowels('bcdfa');
+reverse_vowels('abcdf');
+reverse_vowels('aeiou');
+reverse_vowels('aeiiou');
+reverse_vowels('supercalifragilisticexpialidocious');
+
+sub reverse_vowels {
+
+ my ($s, $p1, $p2, $x, @letters);
+
+ # initialise
+ $s = lc(shift);
+ @letters = split('', $s);
+ $p1 = 0;
+ $p2 = scalar(@letters) - 1;
+
+ # loop while left pointer left of right pointer
+ LOOP: while ($p1 < $p2) {
+
+ # if left pointer has found a vowel
+ if ($letters[$p1] =~ m|[aeiou]|) {
+
+ # wind back right pointer until it meets a vowel or left pointer
+ while ($p1 < $p2) {
+
+ # right pointer has found a vowel, so switch left and right
+ if ($letters[$p2] =~ m|[aeiou]|) {
+ $x = $letters[$p2];
+ $letters[$p2 --] = $letters[$p1];
+ $letters[$p1 ++] = $x;
+ next LOOP;
+
+ # not a vowel, move right pointer to the left
+ } else {
+ $p2 --;
+ }
+ }
+
+ # not a vowel, so move left pointer to the right
+ } else {
+ $p1 ++;
+ }
+ }
+ say qq[\nInput: \$s = '$s'\nOutput: '] . join('', @letters), qq['];
+} \ No newline at end of file