aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-228/luca-ferrari/blog-1.txt1
-rw-r--r--challenge-228/luca-ferrari/blog-2.txt1
-rw-r--r--challenge-228/luca-ferrari/blog-3.txt1
-rw-r--r--challenge-228/luca-ferrari/blog-4.txt1
-rw-r--r--challenge-228/luca-ferrari/blog-5.txt1
-rw-r--r--challenge-228/luca-ferrari/blog-6.txt1
-rw-r--r--challenge-228/luca-ferrari/postgresql/ch-1.plperl24
-rw-r--r--challenge-228/luca-ferrari/postgresql/ch-1.sql23
-rw-r--r--challenge-228/luca-ferrari/postgresql/ch-2.plperl37
-rw-r--r--challenge-228/luca-ferrari/postgresql/ch-2.sql43
-rw-r--r--challenge-228/luca-ferrari/raku/ch-1.p613
-rw-r--r--challenge-228/luca-ferrari/raku/ch-2.p621
12 files changed, 167 insertions, 0 deletions
diff --git a/challenge-228/luca-ferrari/blog-1.txt b/challenge-228/luca-ferrari/blog-1.txt
new file mode 100644
index 0000000000..1640e63f24
--- /dev/null
+++ b/challenge-228/luca-ferrari/blog-1.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/07/31/PerlWeeklyChallenge228.html#task1
diff --git a/challenge-228/luca-ferrari/blog-2.txt b/challenge-228/luca-ferrari/blog-2.txt
new file mode 100644
index 0000000000..cf52c38f6e
--- /dev/null
+++ b/challenge-228/luca-ferrari/blog-2.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/07/31/PerlWeeklyChallenge228.html#task2
diff --git a/challenge-228/luca-ferrari/blog-3.txt b/challenge-228/luca-ferrari/blog-3.txt
new file mode 100644
index 0000000000..9a38aadf55
--- /dev/null
+++ b/challenge-228/luca-ferrari/blog-3.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/07/31/PerlWeeklyChallenge228.html#task1plperl
diff --git a/challenge-228/luca-ferrari/blog-4.txt b/challenge-228/luca-ferrari/blog-4.txt
new file mode 100644
index 0000000000..9ec986875c
--- /dev/null
+++ b/challenge-228/luca-ferrari/blog-4.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/07/31/PerlWeeklyChallenge228.html#task2plperl
diff --git a/challenge-228/luca-ferrari/blog-5.txt b/challenge-228/luca-ferrari/blog-5.txt
new file mode 100644
index 0000000000..e785f9634e
--- /dev/null
+++ b/challenge-228/luca-ferrari/blog-5.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/07/31/PerlWeeklyChallenge228.html#task1plpgsql
diff --git a/challenge-228/luca-ferrari/blog-6.txt b/challenge-228/luca-ferrari/blog-6.txt
new file mode 100644
index 0000000000..f9d2f884c2
--- /dev/null
+++ b/challenge-228/luca-ferrari/blog-6.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2023/07/31/PerlWeeklyChallenge228.html#task2plpgsql
diff --git a/challenge-228/luca-ferrari/postgresql/ch-1.plperl b/challenge-228/luca-ferrari/postgresql/ch-1.plperl
new file mode 100644
index 0000000000..8bc689b1ab
--- /dev/null
+++ b/challenge-228/luca-ferrari/postgresql/ch-1.plperl
@@ -0,0 +1,24 @@
+--
+-- Perl Weekly Challenge 228
+-- Task 1
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-228/>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc228;
+
+CREATE OR REPLACE FUNCTION
+pwc228.task1_plperl( int[] )
+RETURNS int
+AS $CODE$
+ my ( $array ) = @_;
+ my $bag = {};
+
+ # classify the elements
+ $bag->{ $_ }++ for ( $array->@* );
+
+ my ( @uniques ) = grep( { $bag->{ $_ } == 1 } keys( $bag->%* ) );
+ my $sum = 0;
+ $sum += $_ for ( @uniques );
+ return $sum;
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-228/luca-ferrari/postgresql/ch-1.sql b/challenge-228/luca-ferrari/postgresql/ch-1.sql
new file mode 100644
index 0000000000..2926c98fda
--- /dev/null
+++ b/challenge-228/luca-ferrari/postgresql/ch-1.sql
@@ -0,0 +1,23 @@
+--
+-- Perl Weekly Challenge 228
+-- Task 1
+--
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-228/>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc228;
+
+CREATE OR REPLACE FUNCTION
+pwc228.task1_plpgsql( a int[] )
+RETURNS int
+AS $CODE$
+ WITH BAG as (
+ SELECT v
+ FROM unnest( a ) v
+ GROUP BY v
+ HAVING count(*) = 1
+ )
+ SELECT sum( v )
+ FROM bag;
+$CODE$
+LANGUAGE sql;
diff --git a/challenge-228/luca-ferrari/postgresql/ch-2.plperl b/challenge-228/luca-ferrari/postgresql/ch-2.plperl
new file mode 100644
index 0000000000..750cc836d9
--- /dev/null
+++ b/challenge-228/luca-ferrari/postgresql/ch-2.plperl
@@ -0,0 +1,37 @@
+--
+-- Perl Weekly Challenge 228
+-- Task 2
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-228/>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc228;
+
+CREATE OR REPLACE FUNCTION
+pwc228.task2_plperl( int[] )
+RETURNS int
+AS $CODE$
+ my ( $array ) = @_;
+ my $moves = 0;
+
+ # a function to find out the min value
+ my $min = sub {
+ my $min = undef;
+ for ( $_[0]->@* ) {
+ $min = $_ if ( ! $min || $min > $_ );
+ }
+
+ return $min;
+ };
+
+ while ( scalar $array->@* ) {
+ my ( $swap, $min ) = ( shift( $array->@* ), $min->( $array ) );
+ $moves++;
+ last if ! $swap;
+ last if ! $min;
+ push $array->@*, $swap if ( $swap > $min );
+
+ }
+
+ return $moves;
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-228/luca-ferrari/postgresql/ch-2.sql b/challenge-228/luca-ferrari/postgresql/ch-2.sql
new file mode 100644
index 0000000000..0cb1ea4788
--- /dev/null
+++ b/challenge-228/luca-ferrari/postgresql/ch-2.sql
@@ -0,0 +1,43 @@
+--
+-- Perl Weekly Challenge 228
+-- Task 2
+--
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-228/>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc228;
+
+CREATE OR REPLACE FUNCTION
+pwc228.task2_plpgsql( a int[] )
+RETURNS int
+AS $CODE$
+DECLARE
+ current_min int;
+ current_swap int;
+ moves int := 0;
+BEGIN
+ WHILE array_length( a, 1 ) > 1 LOOP
+ -- find the min value
+ SELECT min( v )
+ INTO current_min
+ FROM unnest( a ) v;
+
+
+
+ -- unshift the first element
+ current_swap := a[ 1 ];
+ a := a[ 2 : array_length( a, 1 ) ];
+
+ IF current_swap > current_min THEN
+ a := array_append( a, current_swap );
+ END IF;
+
+ moves := moves + 1;
+
+ END LOOP;
+
+ RETURN moves;
+
+END
+$CODE$
+LANGUAGE plpgsql;
diff --git a/challenge-228/luca-ferrari/raku/ch-1.p6 b/challenge-228/luca-ferrari/raku/ch-1.p6
new file mode 100644
index 0000000000..c1385d616f
--- /dev/null
+++ b/challenge-228/luca-ferrari/raku/ch-1.p6
@@ -0,0 +1,13 @@
+#!raku
+
+#
+# Perl Weekly Challenge 228
+# Task 1
+#
+# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-228/>
+#
+
+sub MAIN( *@nums where { @nums.elems == @nums.grep( * ~~ Int ).elems } ) {
+ my $bag = @nums.Bag;
+ $bag.keys.grep( { $bag{ $_ } == 1 } ).sum.say;
+}
diff --git a/challenge-228/luca-ferrari/raku/ch-2.p6 b/challenge-228/luca-ferrari/raku/ch-2.p6
new file mode 100644
index 0000000000..62ab83f368
--- /dev/null
+++ b/challenge-228/luca-ferrari/raku/ch-2.p6
@@ -0,0 +1,21 @@
+#!raku
+
+#
+# Perl Weekly Challenge 228
+# Task 2
+#
+# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-228/>
+#
+
+sub MAIN( *@nums where { @nums.grep( * ~~ Int ).elems == @nums.elems } ) {
+ my @current = @nums;
+ my $moves = 0;
+
+ while ( @current ) {
+ my $swap = @current.shift;
+ @current.push: $swap if $swap > @current.min;
+ $moves++;
+ }
+
+ $moves.say;
+}