aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-05-31 18:16:16 +0100
committerGitHub <noreply@github.com>2022-05-31 18:16:16 +0100
commitc35a84f25c523eded2a09a7935bac2a6ab042e8b (patch)
tree48e61d7d5434394565a02d522e55ded6775310ab
parentbd643b4aefab39b8a22e391df7b5d4b5dfebe1d2 (diff)
parentcb1fab7eaee0d9d040441a6fcf8878562fcb5dcb (diff)
downloadperlweeklychallenge-club-c35a84f25c523eded2a09a7935bac2a6ab042e8b.tar.gz
perlweeklychallenge-club-c35a84f25c523eded2a09a7935bac2a6ab042e8b.tar.bz2
perlweeklychallenge-club-c35a84f25c523eded2a09a7935bac2a6ab042e8b.zip
Merge pull request #6183 from fluca1978/PWC167
Pwc167
-rw-r--r--challenge-167/luca-ferrari/blog-1.txt1
-rw-r--r--challenge-167/luca-ferrari/blog-2.txt1
-rw-r--r--challenge-167/luca-ferrari/blog-3.txt1
-rw-r--r--challenge-167/luca-ferrari/blog-4.txt1
-rw-r--r--challenge-167/luca-ferrari/postgresql/ch-1.plperl54
-rw-r--r--challenge-167/luca-ferrari/postgresql/ch-2.plperl53
-rwxr-xr-xchallenge-167/luca-ferrari/raku/ch-1.p621
-rwxr-xr-xchallenge-167/luca-ferrari/raku/ch-2.p635
8 files changed, 167 insertions, 0 deletions
diff --git a/challenge-167/luca-ferrari/blog-1.txt b/challenge-167/luca-ferrari/blog-1.txt
new file mode 100644
index 0000000000..6e3713e56a
--- /dev/null
+++ b/challenge-167/luca-ferrari/blog-1.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/05/30/PerlWeeklyChallenge167.html#task1
diff --git a/challenge-167/luca-ferrari/blog-2.txt b/challenge-167/luca-ferrari/blog-2.txt
new file mode 100644
index 0000000000..a91d5690d9
--- /dev/null
+++ b/challenge-167/luca-ferrari/blog-2.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/05/30/PerlWeeklyChallenge167.html#task2
diff --git a/challenge-167/luca-ferrari/blog-3.txt b/challenge-167/luca-ferrari/blog-3.txt
new file mode 100644
index 0000000000..16e8282a8d
--- /dev/null
+++ b/challenge-167/luca-ferrari/blog-3.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/05/30/PerlWeeklyChallenge167.html#task1plperl
diff --git a/challenge-167/luca-ferrari/blog-4.txt b/challenge-167/luca-ferrari/blog-4.txt
new file mode 100644
index 0000000000..4293fac2c7
--- /dev/null
+++ b/challenge-167/luca-ferrari/blog-4.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/05/30/PerlWeeklyChallenge167.html#task2plperl
diff --git a/challenge-167/luca-ferrari/postgresql/ch-1.plperl b/challenge-167/luca-ferrari/postgresql/ch-1.plperl
new file mode 100644
index 0000000000..28c5fda1b4
--- /dev/null
+++ b/challenge-167/luca-ferrari/postgresql/ch-1.plperl
@@ -0,0 +1,54 @@
+-- Perl Weekly Challenge 167
+-- Task 1
+
+CREATE SCHEMA IF NOT EXISTS pwc167;
+
+CREATE OR REPLACE FUNCTION
+pwc167.task1_plperl()
+RETURNS SETOF int
+AS $CODE$
+
+# utility function to check if a number is prime
+my $is_prime = sub {
+ my ($num) = @_;
+ for ( 2 .. $num - 1 ) {
+ return 0 if ( $num % $_ == 0 );
+ }
+
+ return 1;
+};
+
+# get all the permutations
+my $compute_permutations = sub {
+ my ($num) = @_;
+ my @perms;
+ my @digits = split //, $num;
+
+ for ( 0 .. $#digits ) {
+ push @perms, join( '', @digits[ $_ .. $#digits ], @digits[ 0 .. $_ - 1 ] );
+ }
+
+ return @perms;
+};
+
+# check if the given number is a
+# cyclic prime
+my $is_cyclic_prime = sub {
+ my ($value) = @_;
+
+ return 0 unless( $is_prime->( $value ) );
+ for ($compute_permutations->( $value ) ) {
+ return 0 unless( $is_prime->( $_ ) );
+ }
+
+ return 1;
+};
+
+for ( 100 .. 999 ) {
+ return_next( $_ ) if $is_cyclic_prime->( $_ );
+}
+
+return undef;
+
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-167/luca-ferrari/postgresql/ch-2.plperl b/challenge-167/luca-ferrari/postgresql/ch-2.plperl
new file mode 100644
index 0000000000..aab5f61bd0
--- /dev/null
+++ b/challenge-167/luca-ferrari/postgresql/ch-2.plperl
@@ -0,0 +1,53 @@
+-- Perl Weekly Challenge 167
+-- Task 2
+
+CREATE SCHEMA IF NOT EXISTS pwc167;
+
+CREATE OR REPLACE FUNCTION
+pwc167.task2_plperl( numeric )
+RETURNS numeric
+AS $CODE$
+
+my @coeffs = qw/
+ 1.000000000000000174663
+ 5716.400188274341379136
+ -14815.30426768413909044
+ 14291.49277657478554025
+ -6348.160217641458813289
+ 1301.608286058321874105
+ -108.1767053514369634679
+ 2.605696505611755827729
+ -0.7423452510201416151527e-2
+ 0.5384136432509564062961e-7
+ -0.4023533141268236372067e-8
+ /;
+
+
+my $sum_coeffs = 0;
+$sum_coeffs += $_ for ( @coeffs );
+
+my $gamma = sub {
+ my ($z) = @_;
+ my $pi = 3.1415;
+
+ if ( $z < 0.5 ) {
+ $pi / sin( $pi * $z ) / gamma( $z - 1 );
+ }
+ else {
+ sqrt( 2 * $pi )
+ * ( $z + 9 - 0.5) ** ( $z - 0.5)
+ * exp( -1 * ( $z + 9 - 0.5))
+ * do {
+ my ($sum, $i) = (shift(@coeffs), 0);
+ $sum += $_ / ($z + $i++) for @coeffs;
+ $sum;
+ };
+ }
+
+};
+
+
+return $gamma->( $_[0] );
+
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-167/luca-ferrari/raku/ch-1.p6 b/challenge-167/luca-ferrari/raku/ch-1.p6
new file mode 100755
index 0000000000..ff4a600938
--- /dev/null
+++ b/challenge-167/luca-ferrari/raku/ch-1.p6
@@ -0,0 +1,21 @@
+#!raku
+
+# Perl Weekly Challenge 167
+
+sub is-circular-prime( Int $prime )
+{
+ return False if ! $prime.is-prime;
+
+ my @digits = $prime.comb;
+ my $found = True;
+ for 1 ..^ @digits.elems {
+ return False if ! ( |@digits[ $_ .. * - 1], |@digits[ 0 .. $_ - 1 ] ).join.Int.is-prime;
+ }
+
+ return True;
+}
+
+
+sub MAIN() {
+ (100 .. 999).grep( { is-circular-prime( $_ ) } ).join( "\n" ).say;
+}
diff --git a/challenge-167/luca-ferrari/raku/ch-2.p6 b/challenge-167/luca-ferrari/raku/ch-2.p6
new file mode 100755
index 0000000000..a3d8b5bad3
--- /dev/null
+++ b/challenge-167/luca-ferrari/raku/ch-2.p6
@@ -0,0 +1,35 @@
+#!raku
+
+# Perl Weekly Challenge 167
+
+my @coeffs = <
+ 1.000000000000000174663
+ 5716.400188274341379136
+ -14815.30426768413909044
+ 14291.49277657478554025
+ -6348.160217641458813289
+ 1301.608286058321874105
+ -108.1767053514369634679
+ 2.605696505611755827729
+ -0.7423452510201416151527e-2
+ 0.5384136432509564062961e-7
+ -0.4023533141268236372067e-8
+ >;
+
+sub gamma( $z )
+{
+ if ( $z < 0.5 ) {
+ pi / sin( pi * $z ) / gamma( $z - 1 );
+ }
+ else {
+ sqrt( 2 * pi )
+ * ( $z + 9 - 0.5) ** ( $z - 0.5)
+ * exp( -1 * ( $z + 9 - 0.5))
+ * [+] @coeffs Z* 1, |map 1 / ($z + * ) , 0 .. *;
+ }
+
+}
+
+sub MAIN( Int $value ) {
+ gamma( $value ).say;
+}