diff options
| -rw-r--r-- | challenge-228/luca-ferrari/blog-1.txt | 1 | ||||
| -rw-r--r-- | challenge-228/luca-ferrari/blog-2.txt | 1 | ||||
| -rw-r--r-- | challenge-228/luca-ferrari/blog-3.txt | 1 | ||||
| -rw-r--r-- | challenge-228/luca-ferrari/blog-4.txt | 1 | ||||
| -rw-r--r-- | challenge-228/luca-ferrari/blog-5.txt | 1 | ||||
| -rw-r--r-- | challenge-228/luca-ferrari/blog-6.txt | 1 | ||||
| -rw-r--r-- | challenge-228/luca-ferrari/postgresql/ch-1.plperl | 24 | ||||
| -rw-r--r-- | challenge-228/luca-ferrari/postgresql/ch-1.sql | 23 | ||||
| -rw-r--r-- | challenge-228/luca-ferrari/postgresql/ch-2.plperl | 37 | ||||
| -rw-r--r-- | challenge-228/luca-ferrari/postgresql/ch-2.sql | 43 | ||||
| -rw-r--r-- | challenge-228/luca-ferrari/raku/ch-1.p6 | 13 | ||||
| -rw-r--r-- | challenge-228/luca-ferrari/raku/ch-2.p6 | 21 |
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; +} |
