diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2022-06-06 14:15:21 +0200 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2022-06-06 14:15:21 +0200 |
| commit | d15943fd67cb4b91ebce5865524ec67d3db266a1 (patch) | |
| tree | e2433f687e5a86d64a6e63e3d6350e4d9e099e6e | |
| parent | 611da5f504c10b1526225254a81737fd2c513a2c (diff) | |
| download | perlweeklychallenge-club-d15943fd67cb4b91ebce5865524ec67d3db266a1.tar.gz perlweeklychallenge-club-d15943fd67cb4b91ebce5865524ec67d3db266a1.tar.bz2 perlweeklychallenge-club-d15943fd67cb4b91ebce5865524ec67d3db266a1.zip | |
Task 1 plperl done
| -rw-r--r-- | challenge-168/luca-ferrari/postgresql/ch-1.plperl | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/challenge-168/luca-ferrari/postgresql/ch-1.plperl b/challenge-168/luca-ferrari/postgresql/ch-1.plperl new file mode 100644 index 0000000000..585589ec97 --- /dev/null +++ b/challenge-168/luca-ferrari/postgresql/ch-1.plperl @@ -0,0 +1,40 @@ +-- Perl Weekly Challenge 168 +-- Task 1 + +CREATE SCHEMA IF NOT EXISTS pwc168; + +CREATE OR REPLACE FUNCTION +pwc168.task1_plperl( int ) +RETURNS SETOF bigint +AS $CODE$ + my ( $limit ) = @_; + $limit //= 13; + my @perrin = (3, 0, 2); + my $seen = {}; + + my $is_prime = sub { + my ( $number ) = @_; + + for ( 2 .. $number - 1 ) { + return undef if $number % $_ == 0; + } + + return 1; + }; + + while ( $limit > 0 ) { + my $current = $perrin[ -2 ] + $perrin[ -3 ]; + elog( DEBUG, "Limit $n and current is $current" ); + push @perrin, $current; + next if ! $is_prime->( $current ); + next if $seen->{ $current }; + + # found! + $seen->{ $current }++; + return_next( $current ); + $limit--; + } + +return undef; +$CODE$ +LANGUAGE plperl; |
