aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2023-05-30 10:18:43 +0100
committerGitHub <noreply@github.com>2023-05-30 10:18:43 +0100
commit7055c0ea4395f3c47d7abe4f969187f60418bab3 (patch)
treed2c2c82d161ffda6b86afae2a931d51c19fb00c7
parente9b18b2d1b19105dc1af31df58c454f9f1b91cd0 (diff)
parent157d367da82c5d0e17acb32fdbf3b70f3194e5de (diff)
downloadperlweeklychallenge-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.txt1
-rw-r--r--challenge-219/luca-ferrari/blog-2.txt1
-rw-r--r--challenge-219/luca-ferrari/blog-3.txt1
-rw-r--r--challenge-219/luca-ferrari/blog-4.txt1
-rw-r--r--challenge-219/luca-ferrari/blog-5.txt1
-rw-r--r--challenge-219/luca-ferrari/blog-6.txt1
-rw-r--r--challenge-219/luca-ferrari/postgresql/ch-1.plperl19
-rw-r--r--challenge-219/luca-ferrari/postgresql/ch-1.sql18
-rw-r--r--challenge-219/luca-ferrari/postgresql/ch-2.plperl45
-rw-r--r--challenge-219/luca-ferrari/postgresql/ch-2.sql16
-rw-r--r--challenge-219/luca-ferrari/raku/ch-1.p612
-rw-r--r--challenge-219/luca-ferrari/raku/ch-2.p646
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;
+}