diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2022-06-06 13:07:46 +0200 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2022-06-06 13:07:46 +0200 |
| commit | 611da5f504c10b1526225254a81737fd2c513a2c (patch) | |
| tree | b8c145d62273d5f59c71b8a688d0d806d3dc33ad | |
| parent | 77bfa9e18674bfaf4b56008dfdd7d7534411323c (diff) | |
| download | perlweeklychallenge-club-611da5f504c10b1526225254a81737fd2c513a2c.tar.gz perlweeklychallenge-club-611da5f504c10b1526225254a81737fd2c513a2c.tar.bz2 perlweeklychallenge-club-611da5f504c10b1526225254a81737fd2c513a2c.zip | |
Task 2 plperl done
| -rw-r--r-- | challenge-168/luca-ferrari/postgresql/ch-2.plperl | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/challenge-168/luca-ferrari/postgresql/ch-2.plperl b/challenge-168/luca-ferrari/postgresql/ch-2.plperl new file mode 100644 index 0000000000..e150136c3e --- /dev/null +++ b/challenge-168/luca-ferrari/postgresql/ch-2.plperl @@ -0,0 +1,52 @@ +-- Perl Weekly Challenge 168 +-- Task 2 + +CREATE SCHEMA IF NOT EXISTS pwc168; + +CREATE OR REPLACE FUNCTION +pwc168.task2_plperl( int ) +RETURNS int +AS $CODE$ + +my ( $value ) = @_; + +my $is_prime = sub { + my ( $number ) = @_; + + for ( 2 .. $number - 1 ) { + return 0 if ( $number % $_ == 0 ); + } + + return 1; +}; + +my $prime_factors = sub { + my ( $number ) = @_; + my @factors; + + return if $is_prime->( $number ); + + for ( 2 .. $number - 1 ) { + next if ! $is_prime->( $_ ); + next if $number % $_ != 0; + next if $_ > $number; + + while ( ( $number % $_ ) == 0 ) { + push @factors, $_; + $number /= $_; + } + } + + return @factors; +}; + + +my $value = join( '', $prime_factors->( $value ) ); +while ( ! $is_prime->( $value ) ) { + $value = join( '', $prime_factors->( $value ) ); +} + +return $value; + +$CODE$ +LANGUAGE plperl; |
