diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-06-13 03:19:31 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-13 03:19:31 +0100 |
| commit | 2f30fff6358903bd67f2902971ee8eb42944aa45 (patch) | |
| tree | 5a946eb990e134ca4a1fda3b4288789384006358 /challenge-168 | |
| parent | 0102bbbdec9b638d474a1967c0bfd6cd675ea85d (diff) | |
| parent | 3fdef0a6c00bff73c93c31619e13b56c5f8ab8ab (diff) | |
| download | perlweeklychallenge-club-2f30fff6358903bd67f2902971ee8eb42944aa45.tar.gz perlweeklychallenge-club-2f30fff6358903bd67f2902971ee8eb42944aa45.tar.bz2 perlweeklychallenge-club-2f30fff6358903bd67f2902971ee8eb42944aa45.zip | |
Merge pull request #6255 from jaldhar/challenge-168
Challenge 168 by Jaldhar H. Vyas.
Diffstat (limited to 'challenge-168')
| -rw-r--r-- | challenge-168/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-168/jaldhar-h-vyas/perl/ch-1.pl | 37 | ||||
| -rwxr-xr-x | challenge-168/jaldhar-h-vyas/perl/ch-2.pl | 60 | ||||
| -rwxr-xr-x | challenge-168/jaldhar-h-vyas/raku/ch-1.sh | 3 | ||||
| -rwxr-xr-x | challenge-168/jaldhar-h-vyas/raku/ch-2.raku | 36 |
5 files changed, 137 insertions, 0 deletions
diff --git a/challenge-168/jaldhar-h-vyas/blog.txt b/challenge-168/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..aedc70d6aa --- /dev/null +++ b/challenge-168/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2022/06/perl_weekly_challenge_week_168.html
\ No newline at end of file diff --git a/challenge-168/jaldhar-h-vyas/perl/ch-1.pl b/challenge-168/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..55df909711 --- /dev/null +++ b/challenge-168/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl +use 5.030; +use warnings; + +sub isPrime { + my ($n) = @_; + + if ($n < 2) { + return undef; + } + + if ($n == 2) { + return 1; + } + + for my $i (2 .. sqrt($n)) { + if ($n % $i == 0) { + return undef; + } + } + + return 1; +} + +my @perrins = (3, 0, 2); +my $i = 2; +my @perrinPrimes; + +while (scalar @perrinPrimes < 13) { + if (isPrime($perrins[2]) && ! grep { $_ == $perrins[2] } @perrinPrimes) { + push @perrinPrimes, $perrins[2]; + } + push @perrins, $perrins[0] + $perrins[1]; + shift @perrins; +} + +say join q{, }, sort {$a <=> $b} @perrinPrimes; diff --git a/challenge-168/jaldhar-h-vyas/perl/ch-2.pl b/challenge-168/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..bc4f40c199 --- /dev/null +++ b/challenge-168/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl +use 5.030; +use warnings; + +sub isPrime { + my ($n) = @_; + + if ($n < 2) { + return undef; + } + + if ($n == 2) { + return 1; + } + + for my $i (2 .. sqrt($n)) { + if ($n % $i == 0) { + return undef; + } + } + + return 1; +} + +sub factorize { + my ($n) = @_; + my @primeFactors; + + while ($n % 2 == 0) { + push @primeFactors, 2; + $n /= 2; + } + + for (my $i = 3; $i <= sqrt $n; $i += 2) { + while ($n % $i == 0) { + push @primeFactors, $i; + $n /= $i; + } + } + + if ($n > 2) { + push @primeFactors, $n; + } + + return @primeFactors; +} + +my $n = shift; + +unless (defined $n && $n > 1) { + die "Need an integer greater than 1.\n"; +} + +my $hp = $n; +until (isPrime($hp)) { + my @factors = factorize($hp); + $hp = int join q{}, @factors; +} + +say $hp; diff --git a/challenge-168/jaldhar-h-vyas/raku/ch-1.sh b/challenge-168/jaldhar-h-vyas/raku/ch-1.sh new file mode 100755 index 0000000000..82fc545539 --- /dev/null +++ b/challenge-168/jaldhar-h-vyas/raku/ch-1.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +raku -e '(3,0,2, -> $i, $j, $ { $i + $j} ... ∞).grep({ .is-prime }).unique[^13].sort.join(q{, }).say' diff --git a/challenge-168/jaldhar-h-vyas/raku/ch-2.raku b/challenge-168/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..c099d83c78 --- /dev/null +++ b/challenge-168/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,36 @@ +#!/usr/bin/raku + +sub factorize(Int $N) { + my $n = $N; + my @primeFactors; + + while $n %% 2 { + @primeFactors.push(2); + $n /= 2;; + } + + loop (my $i = 3; $i <= $n.sqrt; $i += 2) { + while ($n %% $i) { + @primeFactors.push($i); + $n /= $i; + } + } + + if $n > 2 { + @primeFactors.push($n); + } + + return @primeFactors; +} + +sub MAIN( + Int $n where { $n > 1 } #= a positive integer greater than 1 +) { + my $hp = $n; + until $hp.is-prime { + my @factors = factorize($hp); + $hp = @factors.join(q{}).Int; + } + + say $hp; +} |
