diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-05-31 18:16:16 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-31 18:16:16 +0100 |
| commit | c35a84f25c523eded2a09a7935bac2a6ab042e8b (patch) | |
| tree | 48e61d7d5434394565a02d522e55ded6775310ab | |
| parent | bd643b4aefab39b8a22e391df7b5d4b5dfebe1d2 (diff) | |
| parent | cb1fab7eaee0d9d040441a6fcf8878562fcb5dcb (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-167/luca-ferrari/blog-2.txt | 1 | ||||
| -rw-r--r-- | challenge-167/luca-ferrari/blog-3.txt | 1 | ||||
| -rw-r--r-- | challenge-167/luca-ferrari/blog-4.txt | 1 | ||||
| -rw-r--r-- | challenge-167/luca-ferrari/postgresql/ch-1.plperl | 54 | ||||
| -rw-r--r-- | challenge-167/luca-ferrari/postgresql/ch-2.plperl | 53 | ||||
| -rwxr-xr-x | challenge-167/luca-ferrari/raku/ch-1.p6 | 21 | ||||
| -rwxr-xr-x | challenge-167/luca-ferrari/raku/ch-2.p6 | 35 |
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; +} |
