aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2023-01-16 11:16:31 +0100
committerLuca Ferrari <fluca1978@gmail.com>2023-01-16 11:16:31 +0100
commit690be1c0b847c56acce9a2927f9dae8d4c151a97 (patch)
tree4072235c5b5799d03c5513bd16e2fa40d3f9d9e0
parentbc210de1838b13167645ae1419889b64ad132e1d (diff)
downloadperlweeklychallenge-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.plperl37
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;