diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-03-14 02:19:01 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-14 02:19:01 +0000 |
| commit | fb16ab2011cb19aadf882c254291d0460cb2dea4 (patch) | |
| tree | 935522559c45d75ac5d38ad4d7ffd48121362765 | |
| parent | 10363a8cfc4cc50a1d02bb21a6553f532aebb841 (diff) | |
| parent | 65b524906ffd18f8dbc0cd482881b4d30d24fefd (diff) | |
| download | perlweeklychallenge-club-fb16ab2011cb19aadf882c254291d0460cb2dea4.tar.gz perlweeklychallenge-club-fb16ab2011cb19aadf882c254291d0460cb2dea4.tar.bz2 perlweeklychallenge-club-fb16ab2011cb19aadf882c254291d0460cb2dea4.zip | |
Merge pull request #5777 from jaldhar/challenge-155
Challenge 155 by Jaldhar H. Vyas.
| -rw-r--r-- | challenge-155/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-155/jaldhar-h-vyas/perl/ch-1.pl | 58 | ||||
| -rwxr-xr-x | challenge-155/jaldhar-h-vyas/perl/ch-2.pl | 31 | ||||
| -rwxr-xr-x | challenge-155/jaldhar-h-vyas/raku/ch-1.raku | 18 | ||||
| -rwxr-xr-x | challenge-155/jaldhar-h-vyas/raku/ch-2.raku | 18 |
5 files changed, 126 insertions, 0 deletions
diff --git a/challenge-155/jaldhar-h-vyas/blog.txt b/challenge-155/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..ae1fd570c7 --- /dev/null +++ b/challenge-155/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2022/03/perl_weekly_challenge_week_155.html
\ No newline at end of file diff --git a/challenge-155/jaldhar-h-vyas/perl/ch-1.pl b/challenge-155/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..ff2f2b3a44 --- /dev/null +++ b/challenge-155/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,58 @@ +#!/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 nextPrime { + state $i = 1; + if (scalar @_) { + $i = shift; + } + + while ($i++) { + if (isPrime($i)) { + return $i; + } + } +} + +my @fortunates; + +my $i = 0; +while (scalar @fortunates < 8) { + my $pn = nextPrime(1); + + for my $j (1 .. $i++) { + $pn *= nextPrime(); + } + + my $m = $pn + 1; + + while($m++) { + if (isPrime($m) && !grep { $_ == $m - $pn } @fortunates) { + push @fortunates, $m - $pn; + last; + } + } +} + +say join q{, }, sort {$a <=> $b} @fortunates; diff --git a/challenge-155/jaldhar-h-vyas/perl/ch-2.pl b/challenge-155/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..4bfad94e48 --- /dev/null +++ b/challenge-155/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,31 @@ +#!/usr/bin/perl +use 5.030; +use warnings; +no warnings 'experimental'; +use Memoize; + +sub fibonacci { + my ($n) = @_; + + if ($n <= 1) { + return $n; + } + return fibonacci($n - 1) + fibonacci($n - 2); +} + +sub pisano { + my ($n) = @_; + my $i = 2; + + while (1) { + my @moduli = map { fibonacci($_) % $n; } 0 .. $i -1; + + if (@moduli[0 .. $i / 2 - 1] ~~ @moduli[$i / 2 .. $#moduli]) { + return $i / 2; + } + $i += 2; + } +} + +memoize('fibonacci'); +say pisano(3); diff --git a/challenge-155/jaldhar-h-vyas/raku/ch-1.raku b/challenge-155/jaldhar-h-vyas/raku/ch-1.raku new file mode 100755 index 0000000000..30c11cffa4 --- /dev/null +++ b/challenge-155/jaldhar-h-vyas/raku/ch-1.raku @@ -0,0 +1,18 @@ +#!/usr/bin/raku + +sub MAIN() { + my @fortunates; + + my $i = 0; + while @fortunates.elems < 8 { + my $pn = [*] (2 ... ∞).grep({ .is-prime; })[0 .. $i++]; + for $pn + 2 .. ∞ -> $m { + if ($m.is-prime && $m - $pn ∉ @fortunates) { + @fortunates.push($m - $pn); + last; + } + } + } + + @fortunates.sort.join(q{, }).say; +}
\ No newline at end of file diff --git a/challenge-155/jaldhar-h-vyas/raku/ch-2.raku b/challenge-155/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..830fcbe9ff --- /dev/null +++ b/challenge-155/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,18 @@ +#!/usr/bin/raku + +sub π($n) { + my @fibs = 0, 1, -> $a, $b { $a + $b} ... ∞; + + my $i = 2; + loop { + my @moduli = @fibs[0 ..^ $i].map({ $_ mod $n; }); + if (@moduli[0 ..^ $i / 2] Z== @moduli[$i / 2 .. *]).all { + return $i / 2; + } + $i += 2; + } +} + +sub MAIN() { + say π(3); +}
\ No newline at end of file |
