diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-05-30 10:18:43 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-30 10:18:43 +0100 |
| commit | 7055c0ea4395f3c47d7abe4f969187f60418bab3 (patch) | |
| tree | d2c2c82d161ffda6b86afae2a931d51c19fb00c7 | |
| parent | e9b18b2d1b19105dc1af31df58c454f9f1b91cd0 (diff) | |
| parent | 157d367da82c5d0e17acb32fdbf3b70f3194e5de (diff) | |
| download | perlweeklychallenge-club-7055c0ea4395f3c47d7abe4f969187f60418bab3.tar.gz perlweeklychallenge-club-7055c0ea4395f3c47d7abe4f969187f60418bab3.tar.bz2 perlweeklychallenge-club-7055c0ea4395f3c47d7abe4f969187f60418bab3.zip | |
Merge pull request #8157 from fluca1978/PWC219
Pwc219
| -rw-r--r-- | challenge-219/luca-ferrari/blog-1.txt | 1 | ||||
| -rw-r--r-- | challenge-219/luca-ferrari/blog-2.txt | 1 | ||||
| -rw-r--r-- | challenge-219/luca-ferrari/blog-3.txt | 1 | ||||
| -rw-r--r-- | challenge-219/luca-ferrari/blog-4.txt | 1 | ||||
| -rw-r--r-- | challenge-219/luca-ferrari/blog-5.txt | 1 | ||||
| -rw-r--r-- | challenge-219/luca-ferrari/blog-6.txt | 1 | ||||
| -rw-r--r-- | challenge-219/luca-ferrari/postgresql/ch-1.plperl | 19 | ||||
| -rw-r--r-- | challenge-219/luca-ferrari/postgresql/ch-1.sql | 18 | ||||
| -rw-r--r-- | challenge-219/luca-ferrari/postgresql/ch-2.plperl | 45 | ||||
| -rw-r--r-- | challenge-219/luca-ferrari/postgresql/ch-2.sql | 16 | ||||
| -rw-r--r-- | challenge-219/luca-ferrari/raku/ch-1.p6 | 12 | ||||
| -rw-r--r-- | challenge-219/luca-ferrari/raku/ch-2.p6 | 46 |
12 files changed, 162 insertions, 0 deletions
diff --git a/challenge-219/luca-ferrari/blog-1.txt b/challenge-219/luca-ferrari/blog-1.txt new file mode 100644 index 0000000000..a5f46326a0 --- /dev/null +++ b/challenge-219/luca-ferrari/blog-1.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/29/PerlWeeklyChallenge219.html#task1 diff --git a/challenge-219/luca-ferrari/blog-2.txt b/challenge-219/luca-ferrari/blog-2.txt new file mode 100644 index 0000000000..a324b24d05 --- /dev/null +++ b/challenge-219/luca-ferrari/blog-2.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/29/PerlWeeklyChallenge219.html#task2 diff --git a/challenge-219/luca-ferrari/blog-3.txt b/challenge-219/luca-ferrari/blog-3.txt new file mode 100644 index 0000000000..68a036f7af --- /dev/null +++ b/challenge-219/luca-ferrari/blog-3.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/29/PerlWeeklyChallenge219.html#task1plperl diff --git a/challenge-219/luca-ferrari/blog-4.txt b/challenge-219/luca-ferrari/blog-4.txt new file mode 100644 index 0000000000..016b6d23ce --- /dev/null +++ b/challenge-219/luca-ferrari/blog-4.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/29/PerlWeeklyChallenge219.html#task2plperl diff --git a/challenge-219/luca-ferrari/blog-5.txt b/challenge-219/luca-ferrari/blog-5.txt new file mode 100644 index 0000000000..dfc2c101fa --- /dev/null +++ b/challenge-219/luca-ferrari/blog-5.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/29/PerlWeeklyChallenge219.html#task1plpgsql diff --git a/challenge-219/luca-ferrari/blog-6.txt b/challenge-219/luca-ferrari/blog-6.txt new file mode 100644 index 0000000000..1b6230273c --- /dev/null +++ b/challenge-219/luca-ferrari/blog-6.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/05/29/PerlWeeklyChallenge219.html#task2plpgsql diff --git a/challenge-219/luca-ferrari/postgresql/ch-1.plperl b/challenge-219/luca-ferrari/postgresql/ch-1.plperl new file mode 100644 index 0000000000..b2934acb3a --- /dev/null +++ b/challenge-219/luca-ferrari/postgresql/ch-1.plperl @@ -0,0 +1,19 @@ +-- +-- Perl Weekly Challenge 219 +-- Task 1 +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-219/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc219; + +CREATE OR REPLACE FUNCTION +pwc219.task1_plperl( int[] ) +RETURNS SETOF int +AS $CODE$ + my ( $n ) = @_; + for my $value ( sort { $a <=> $b } map { $_ * $_ } $n->@* ) { + return_next( $value ); + } +return; +$CODE$ +LANGUAGE plperl; diff --git a/challenge-219/luca-ferrari/postgresql/ch-1.sql b/challenge-219/luca-ferrari/postgresql/ch-1.sql new file mode 100644 index 0000000000..b77d9878ae --- /dev/null +++ b/challenge-219/luca-ferrari/postgresql/ch-1.sql @@ -0,0 +1,18 @@ +-- +-- Perl Weekly Challenge 219 +-- Task 1 +-- +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-219/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc219; + +CREATE OR REPLACE FUNCTION +pwc219.task1_plpgsql( n int[] ) +RETURNS SETOF int +AS $CODE$ + SELECT v * v + FROM unnest( n ) v + ORDER BY 1 +$CODE$ +LANGUAGE sql; diff --git a/challenge-219/luca-ferrari/postgresql/ch-2.plperl b/challenge-219/luca-ferrari/postgresql/ch-2.plperl new file mode 100644 index 0000000000..cc922b696c --- /dev/null +++ b/challenge-219/luca-ferrari/postgresql/ch-2.plperl @@ -0,0 +1,45 @@ +-- +-- Perl Weekly Challenge 219 +-- Task 2 +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-219/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc219; + +CREATE OR REPLACE FUNCTION +pwc219.task2_plperl( int[], int[] ) +RETURNS int +AS $CODE$ + my ( $c, $days ) = @_; + my $costs = {}; + $costs->{ 1 } = $c->@[ 0 ]; + $costs->{ 7 } = $c->@[ 1 ]; + $costs->{ 30 } = $c->@[ 2 ]; + + my @evaluated; + my $current_cost = ( scalar $days->@* ) * $costs->{ 1 }; + push @evaluated, { cost => 0, days => $days }; + + while ( ( scalar @evaluated ) > 0 ) { + my $entry = shift @evaluated; + + if ( $entry->{ days }->@* == 0 ) { + $current_cost = $entry->{ cost } if ( $entry->{ cost } < $current_cost ); + } + else { + next if ( $entry->{ cost } >= $current_cost ); + + my $begin_date = $entry->{ days }->[ 0 ]; + for my $duration ( keys $costs->%* ) { + my $end_date = $begin_date + $duration - 1; + my $cost = $entry->{ cost } + $costs->{ $duration }; + my @remaining_days = grep { $_ > $end_date } $entry->{ days }->@*; + push @evaluated, { cost => $cost, days => \@remaining_days }; + } + } + } + + return $current_cost; + +$CODE$ +LANGUAGE plperl; diff --git a/challenge-219/luca-ferrari/postgresql/ch-2.sql b/challenge-219/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..7193da49de --- /dev/null +++ b/challenge-219/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1,16 @@ +-- +-- Perl Weekly Challenge 219 +-- Task 2 +-- +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-219/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc219; + +CREATE OR REPLACE FUNCTION +pwc219.task2_plpgsql( c int[], days int[] ) +RETURNS int +AS $CODE$ + SELECT pwc219.task2_plperl( c, days ); +$CODE$ +LANGUAGE sql; diff --git a/challenge-219/luca-ferrari/raku/ch-1.p6 b/challenge-219/luca-ferrari/raku/ch-1.p6 new file mode 100644 index 0000000000..ab4f88ab0b --- /dev/null +++ b/challenge-219/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,12 @@ +#!raku + +# +# Perl Weekly Challenge 219 +# Task 1 +# +# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-219/> +# + +sub MAIN( *@n where { @n.grep( * ~~ Int ).elems == @n.elems } ) { + @n.map( { $_ ** 2 } ).sort.join( ', ' ).say; +} diff --git a/challenge-219/luca-ferrari/raku/ch-2.p6 b/challenge-219/luca-ferrari/raku/ch-2.p6 new file mode 100644 index 0000000000..aee75e8c92 --- /dev/null +++ b/challenge-219/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,46 @@ +#!raku + +# +# Perl Weekly Challenge 219 +# Task 2 +# +# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-219/> +# + +sub MAIN() { + + my @days = 1, 5, 6, 7, 9, 15; + + # sort the days + @days .= sort; + + my %costs; + %costs<1> = 2; + %costs<7> = 7; + %costs<30> = 25; + + my @evaluated; + @evaluated.push: { cost => 0, days => @days }; + my $current-cost = @days.elems * %costs<1>; + + while ( @evaluated.elems > 0 ) { + my %entry = @evaluated.shift; + + if ( %entry<days>.elems == 0 ) { + $current-cost = %entry<cost> if ( %entry<cost> < $current-cost ); + } + else { + next if ( %entry<cost> >= $current-cost ); + + my $begin-date = %entry<days>[ 0 ]; + for %costs.keys { + my $end-date = $begin-date + $_ - 1; + my @uncovered-days = %entry<days>.grep( * > $end-date ); + my $cost = %entry<cost> + %costs{ $_ }; + @evaluated.push: { cost => $cost, days => @uncovered-days }; + } + } + } + + say $current-cost; +} |
