aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2023-03-17 12:06:36 +0100
committerLuca Ferrari <fluca1978@gmail.com>2023-03-17 12:06:36 +0100
commit175a14097edd1869dfcfc577474e110b15f56dd5 (patch)
tree2e549aa16623bc33af839cec0214e7b9b4367fe9
parentd75f8ec2c07ddc7e9e765000033b022e9402ac76 (diff)
downloadperlweeklychallenge-club-175a14097edd1869dfcfc577474e110b15f56dd5.tar.gz
perlweeklychallenge-club-175a14097edd1869dfcfc577474e110b15f56dd5.tar.bz2
perlweeklychallenge-club-175a14097edd1869dfcfc577474e110b15f56dd5.zip
Task 2 plperl
-rw-r--r--challenge-208/luca-ferrari/postgresql/ch-2.plperl39
1 files changed, 39 insertions, 0 deletions
diff --git a/challenge-208/luca-ferrari/postgresql/ch-2.plperl b/challenge-208/luca-ferrari/postgresql/ch-2.plperl
new file mode 100644
index 0000000000..6e2f8666fc
--- /dev/null
+++ b/challenge-208/luca-ferrari/postgresql/ch-2.plperl
@@ -0,0 +1,39 @@
+--
+-- Perl Weekly Challenge 208
+-- Task 2
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-208/>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc208;
+
+/*
+testdb=> select pwc208.task2_plperl( array[ 1,2,2,4,5]::int[] );
+ task2_plperl
+--------------------------
+ (2,"Duplicated value 2")
+ (3,"Missing value 3")
+(2 rows)
+
+*/
+CREATE OR REPLACE FUNCTION
+pwc208.task2_plperl( int[] )
+RETURNS TABLE( v int, d text )
+AS $CODE$
+ my ( $list ) = @_;
+ my %results;
+
+ my ( $min, $max ) = ( sort $list->@* )[0, -1];
+ for my $needle ( $min .. $max ) {
+ $results{ $needle } += scalar grep { $_ == $needle } $list->@*;
+ }
+
+ for ( sort keys %results ) {
+ next if $results{ $_ } == 1;
+ return_next( { v => $_, d => "Missing value $_" } ) if ( $results{ $_ } == 0 );
+ return_next( { v => $_, d => "Duplicated value $_" } ) if ( $results{ $_ } > 1 );
+ }
+
+return undef;
+
+$CODE$
+LANGUAGE plperl;