aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2022-10-17 12:14:24 +0200
committerLuca Ferrari <fluca1978@gmail.com>2022-10-17 12:14:24 +0200
commitf50a1e5e7dd6a30f1a63732a76e277a57260c142 (patch)
treec07c327352670dd12d1af12b21ebfe546677ddc7
parente1b6e75c2e06431f61f1537af5a1b387b6bd72f9 (diff)
downloadperlweeklychallenge-club-f50a1e5e7dd6a30f1a63732a76e277a57260c142.tar.gz
perlweeklychallenge-club-f50a1e5e7dd6a30f1a63732a76e277a57260c142.tar.bz2
perlweeklychallenge-club-f50a1e5e7dd6a30f1a63732a76e277a57260c142.zip
Task 1 and 2 PLPerl
-rw-r--r--challenge-187/luca-ferrari/postgresql/ch-1.plperl45
-rw-r--r--challenge-187/luca-ferrari/postgresql/ch-2.plperl51
2 files changed, 96 insertions, 0 deletions
diff --git a/challenge-187/luca-ferrari/postgresql/ch-1.plperl b/challenge-187/luca-ferrari/postgresql/ch-1.plperl
new file mode 100644
index 0000000000..b4f2b0f93b
--- /dev/null
+++ b/challenge-187/luca-ferrari/postgresql/ch-1.plperl
@@ -0,0 +1,45 @@
+-- Perl Weekly Challenge 187
+-- Task 1
+
+CREATE SCHEMA IF NOT EXISTS pwc187;
+
+CREATE OR REPLACE FUNCTION
+pwc187.task1_plperl( text, text, text, text )
+RETURNS INT
+AS $CODE$
+use DateTime;
+my ( $foo_start, $foo_end, $bar_start, $bar_end ) = @_;
+my @dates;
+
+for ( $foo_start, $foo_end, $bar_start, $bar_end ) {
+ $_ =~ / ^ (\d{2}) - (\d{2}) $ /x;
+ push @dates, DateTime->new( year => 2022, day => $1, month => $2 );
+}
+
+my $days = 0;
+
+if ( DateTime->compare( $dates[ 0 ], $dates[ 3 ] ) > 0
+ || DateTime->compare( $dates[ 1 ], $dates[ 2 ] ) < 0 ) {
+ # one ends before the begin of the other or viceversa
+ $days = 0;
+}
+else {
+ my ( $start, $end );
+ $start = DateTime->compare( $dates[ 0 ], $dates[ 2 ] ) <= 0 ? $dates[ 0 ] : $dates[ 2 ];
+ $end = DateTime->compare( $dates[ 1 ], $dates[ 3 ] ) <= 0 ? $dates[ 1 ] : $dates[ 3 ];
+
+ while ( DateTime->compare( $start, $end ) <= 0 ) {
+ $days++ if ( DateTime->compare( $start, $dates[ 0 ] ) >= 0
+ && DateTime->compare( $start, $dates[ 1 ] ) <= 0
+ && DateTime->compare( $start, $dates[ 2 ] ) >= 0
+ && DateTime->compare( $start, $dates[ 3 ] ) <= 0 );
+ $start = $start->add( days => 1 );
+ }
+}
+
+
+
+return $days;
+
+$CODE$
+LANGUAGE plperlu;
diff --git a/challenge-187/luca-ferrari/postgresql/ch-2.plperl b/challenge-187/luca-ferrari/postgresql/ch-2.plperl
new file mode 100644
index 0000000000..cb642d4673
--- /dev/null
+++ b/challenge-187/luca-ferrari/postgresql/ch-2.plperl
@@ -0,0 +1,51 @@
+-- Perl Weekly Challenge 187
+-- Task 2
+
+CREATE SCHEMA IF NOT EXISTS pwc187;
+
+CREATE OR REPLACE FUNCTION
+pwc187.task2_plperl()
+RETURNS VOID
+AS $CODE$
+$CODE$
+LANGUAGE plperl;
+-- Perl Weekly Challenge 187
+-- Task 2
+
+CREATE SCHEMA IF NOT EXISTS pwc187;
+
+CREATE OR REPLACE FUNCTION
+pwc187.task2_plperl( int[] )
+RETURNS int[]
+AS $CODE$
+my ( @n ) = $_[0]->@*;
+my @triplets;
+my $max = 0;
+
+
+for my $index_a ( 0 .. $#n ) {
+ my $a = $n[ $index_a ];
+
+ for my $index_b ( ( $index_a + 1 ) .. $#n ) {
+ my $b = $n[ $index_b ];
+
+ for my $index_c ( ( $index_b + 1 ) .. $#n ) {
+ my $c = $n[ $index_c ];
+
+ if ( $max <= $a + $b + $c
+ && ( $a + $b ) > $c
+ && ( $b + $c ) > $a
+ && ( $a + $c ) > $b ) {
+
+ @triplets = ( $a, $b, $c );
+ $max = $a + $b + $c;
+ }
+ }
+ }
+}
+
+
+return [@triplets];
+
+$CODE$
+LANGUAGE plperl;