diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2022-10-17 12:14:24 +0200 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2022-10-17 12:14:24 +0200 |
| commit | f50a1e5e7dd6a30f1a63732a76e277a57260c142 (patch) | |
| tree | c07c327352670dd12d1af12b21ebfe546677ddc7 | |
| parent | e1b6e75c2e06431f61f1537af5a1b387b6bd72f9 (diff) | |
| download | perlweeklychallenge-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.plperl | 45 | ||||
| -rw-r--r-- | challenge-187/luca-ferrari/postgresql/ch-2.plperl | 51 |
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; |
