diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2023-01-16 11:16:31 +0100 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2023-01-16 11:16:31 +0100 |
| commit | 690be1c0b847c56acce9a2927f9dae8d4c151a97 (patch) | |
| tree | 4072235c5b5799d03c5513bd16e2fa40d3f9d9e0 | |
| parent | bc210de1838b13167645ae1419889b64ad132e1d (diff) | |
| download | perlweeklychallenge-club-690be1c0b847c56acce9a2927f9dae8d4c151a97.tar.gz perlweeklychallenge-club-690be1c0b847c56acce9a2927f9dae8d4c151a97.tar.bz2 perlweeklychallenge-club-690be1c0b847c56acce9a2927f9dae8d4c151a97.zip | |
Task 1 plperl
| -rw-r--r-- | challenge-200/luca-ferrari/postgresql/ch-1.plperl | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/challenge-200/luca-ferrari/postgresql/ch-1.plperl b/challenge-200/luca-ferrari/postgresql/ch-1.plperl new file mode 100644 index 0000000000..53d25fae3b --- /dev/null +++ b/challenge-200/luca-ferrari/postgresql/ch-1.plperl @@ -0,0 +1,37 @@ +-- +-- Perl Weekly Challenge 200 +-- Task 1 +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-200/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc200; + +CREATE OR REPLACE FUNCTION +pwc200.task1_plperl( int[] ) +RETURNS SETOF int[] +AS $CODE$ + my ( $list ) = @_; + my @slices; + + for my $center ( 1 .. $list->@* - 1 ) { + for ( 1 .. $center ) { + my ( $start, $end ) = ( $center - $_, $center + $_ ); + $start = 0 if $start < 0; + $end = $list->@* - 1 if $end >= $list->@*; + + my @seeking = $list->@[ $start .. $end ]; + my $ok = 1; + my $difference = undef; + + for ( 1 .. $#seeking ) { + $difference = $seeking[ $_ ] - $seeking[ $_ - 1 ] if ! defined( $difference ); + $ok = 0 and last if $seeking[ $_ ] - $seeking[ $_ - 1 ] != $difference; + } + + return_next( [@seeking] ) if $ok and scalar( @seeking ) >= 3; + } + } + +return; +$CODE$ +LANGUAGE plperl; |
