aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2022-06-05 23:57:12 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2022-06-05 23:57:12 -0400
commit8ac9edd849b9175cb7c3b43a90638db80d2c1c78 (patch)
tree8efd187d37a00aab9208b22eac9d0b6e002d5cf7
parentcdf363deb9f4036dbde570833ff012cd5b4f74a9 (diff)
downloadperlweeklychallenge-club-8ac9edd849b9175cb7c3b43a90638db80d2c1c78.tar.gz
perlweeklychallenge-club-8ac9edd849b9175cb7c3b43a90638db80d2c1c78.tar.bz2
perlweeklychallenge-club-8ac9edd849b9175cb7c3b43a90638db80d2c1c78.zip
Challenge 167 by Jaldhar H. Vyas.
-rw-r--r--challenge-167/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-167/jaldhar-h-vyas/perl/ch-1.pl46
-rwxr-xr-xchallenge-167/jaldhar-h-vyas/perl/ch-2.pl49
-rwxr-xr-xchallenge-167/jaldhar-h-vyas/raku/ch-1.raku26
-rwxr-xr-xchallenge-167/jaldhar-h-vyas/raku/ch-2.raku45
5 files changed, 167 insertions, 0 deletions
diff --git a/challenge-167/jaldhar-h-vyas/blog.txt b/challenge-167/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..401873b45e
--- /dev/null
+++ b/challenge-167/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2022/06/perl_weekly_challenge_week_167.html \ No newline at end of file
diff --git a/challenge-167/jaldhar-h-vyas/perl/ch-1.pl b/challenge-167/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..1f5b9007a9
--- /dev/null
+++ b/challenge-167/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,46 @@
+#!/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 @circularPrimes;
+my $n = 99;
+
+outer: while (scalar @circularPrimes < 10) {
+ $n++;
+
+ unless ($n =~ /^[1379]+$/) {
+ next;
+ }
+
+ my $rotated = $n;
+ for (0 .. length $n) {
+ unless (isPrime($rotated) && ! grep { $_ == $rotated } @circularPrimes) {
+ next outer;
+ }
+
+ $rotated = substr($rotated, 1) . substr($rotated, 0, 1);
+ }
+ push @circularPrimes, $n;
+}
+
+say join q{, }, @circularPrimes;
diff --git a/challenge-167/jaldhar-h-vyas/perl/ch-2.pl b/challenge-167/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..de90de30ea
--- /dev/null
+++ b/challenge-167/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,49 @@
+#!/usr/bin/perl
+use 5.030;
+use warnings;
+use utf8;
+use Math::Complex qw/ Im Re pi /;
+use Math::Round qw/ nearest /;
+use constant ε => 1e-7;
+
+sub dropImaginary {
+ my ($z) = @_;
+
+ if (abs(Im($z)) < ε) {
+ $z = Re($z);
+ }
+
+ return $z;
+}
+
+sub Γ {
+ my ($z) = @_;
+ $z = Math::Complex->new($z);
+
+ if (Re($z) < .5) {
+ return pi / sin(pi * $z) / Γ(1 - $z);
+ } else {
+ my @coefficients = qw/
+ 676.5203681218851
+ -1259.1392167224028
+ 771.32342877765313
+ -176.61502916214059
+ 12.507343278686905
+ -0.13857109526572012
+ 9.9843695780195716e-6
+ 1.5056327351493116e-7
+ /;
+ $z -= 1;
+ my $sum = 0.99999999999980993;
+ my $i = 0;
+ for my $c (@coefficients) {
+ $sum += $c / ($z + 1 + $i++);
+ }
+ my $t = $z + scalar @coefficients - 0.5;
+ return dropImaginary(sqrt(2 * pi) * $t ** ($z + 0.5) * exp(-$t) * $sum);
+ }
+}
+
+for my $i (3, 5, 7) {
+ say nearest(0.01, Γ($i));
+}
diff --git a/challenge-167/jaldhar-h-vyas/raku/ch-1.raku b/challenge-167/jaldhar-h-vyas/raku/ch-1.raku
new file mode 100755
index 0000000000..90f8adb86b
--- /dev/null
+++ b/challenge-167/jaldhar-h-vyas/raku/ch-1.raku
@@ -0,0 +1,26 @@
+#!/usr/bin/raku
+
+sub MAIN() {
+ my @circularPrimes;
+ my $n = 99;
+
+ outer: while @circularPrimes.elems < 10 {
+ $n++;
+
+ unless $n ~~ /^ <[1379]>+ $/ {
+ next;
+ }
+
+ my $rotated = $n;
+ for 0 ..^ $n.chars {
+ unless $rotated.is-prime && $rotated.Int ∉ @circularPrimes {
+ next outer;
+ }
+
+ $rotated = $rotated.substr(1 .. *) ~ $rotated.substr(0, 1);
+ }
+ @circularPrimes.push($n);
+ }
+
+ @circularPrimes.join(q{, }).say;
+} \ No newline at end of file
diff --git a/challenge-167/jaldhar-h-vyas/raku/ch-2.raku b/challenge-167/jaldhar-h-vyas/raku/ch-2.raku
new file mode 100755
index 0000000000..add7e1e8bd
--- /dev/null
+++ b/challenge-167/jaldhar-h-vyas/raku/ch-2.raku
@@ -0,0 +1,45 @@
+#!/usr/bin/raku
+
+sub Γ(Real $n) {
+ my $z = Complex.new($n, 0);
+
+ if $z.re < 0.5 {
+ return pi / sin(pi * $z) / Γ(1 - $z);
+ } else {
+ my @coefficients = <
+ 676.5203681218851
+ -1259.1392167224028
+ 771.32342877765313
+ -176.61502916214059
+ 12.507343278686905
+ -0.13857109526572012
+ 9.9843695780195716e-6
+ 1.5056327351493116e-7
+ >;
+ $z -= 1;
+ my $sum = 0.99999999999980993;
+ my $i = 0;
+ for @coefficients -> $c {
+ $sum += $c / ($z + 1 + $i++);
+ }
+ my $t = $z + @coefficients.elems - 0.5;
+ return dropImaginary(sqrt(2 * pi) * $t ** ($z + 0.5) * exp(-$t) * $sum);
+ }
+}
+
+sub dropImaginary(Complex $n) {
+ constant ε = 1e-7;
+ my $z = $n;
+
+ if $z.im.abs < ε {
+ $z = $z.re;
+ }
+
+ return $z;
+}
+
+sub MAIN() {
+ for (3, 5, 7) -> $i {
+ say Γ($i).round(0.01);
+ }
+} \ No newline at end of file