diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-03-18 22:05:45 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-18 22:05:45 +0000 |
| commit | 6d11830db0045ec77a389d5b013ccf05ca7307b1 (patch) | |
| tree | caa4c745f89c88d5da04958369df849d257aa251 | |
| parent | 561153c080466c0782c46598a1d0f41b5f37a779 (diff) | |
| parent | 6233052babcae6870d1e06844ce79b79789db74b (diff) | |
| download | perlweeklychallenge-club-6d11830db0045ec77a389d5b013ccf05ca7307b1.tar.gz perlweeklychallenge-club-6d11830db0045ec77a389d5b013ccf05ca7307b1.tar.bz2 perlweeklychallenge-club-6d11830db0045ec77a389d5b013ccf05ca7307b1.zip | |
Merge pull request #7742 from fluca1978/PWC208
Pwc208
| -rw-r--r-- | challenge-208/luca-ferrari/blog-1.txt | 1 | ||||
| -rw-r--r-- | challenge-208/luca-ferrari/blog-2.txt | 1 | ||||
| -rw-r--r-- | challenge-208/luca-ferrari/blog-3.txt | 1 | ||||
| -rw-r--r-- | challenge-208/luca-ferrari/blog-4.txt | 1 | ||||
| -rw-r--r-- | challenge-208/luca-ferrari/blog-5.txt | 1 | ||||
| -rw-r--r-- | challenge-208/luca-ferrari/blog-6.txt | 1 | ||||
| -rw-r--r-- | challenge-208/luca-ferrari/postgresql/ch-1.plperl | 38 | ||||
| -rw-r--r-- | challenge-208/luca-ferrari/postgresql/ch-1.sql | 30 | ||||
| -rw-r--r-- | challenge-208/luca-ferrari/postgresql/ch-2.plperl | 39 | ||||
| -rw-r--r-- | challenge-208/luca-ferrari/postgresql/ch-2.sql | 29 | ||||
| -rw-r--r-- | challenge-208/luca-ferrari/raku/ch-1.p6 | 20 | ||||
| -rw-r--r-- | challenge-208/luca-ferrari/raku/ch-2.p6 | 22 |
12 files changed, 184 insertions, 0 deletions
diff --git a/challenge-208/luca-ferrari/blog-1.txt b/challenge-208/luca-ferrari/blog-1.txt new file mode 100644 index 0000000000..c4f5c7028c --- /dev/null +++ b/challenge-208/luca-ferrari/blog-1.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/03/17/PerlWeeklyChallenge208.html#task1 diff --git a/challenge-208/luca-ferrari/blog-2.txt b/challenge-208/luca-ferrari/blog-2.txt new file mode 100644 index 0000000000..4f1f2fde94 --- /dev/null +++ b/challenge-208/luca-ferrari/blog-2.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/03/17/PerlWeeklyChallenge208.html#task2 diff --git a/challenge-208/luca-ferrari/blog-3.txt b/challenge-208/luca-ferrari/blog-3.txt new file mode 100644 index 0000000000..4264a6b950 --- /dev/null +++ b/challenge-208/luca-ferrari/blog-3.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/03/17/PerlWeeklyChallenge208.html#task1plperl diff --git a/challenge-208/luca-ferrari/blog-4.txt b/challenge-208/luca-ferrari/blog-4.txt new file mode 100644 index 0000000000..5fe520ac05 --- /dev/null +++ b/challenge-208/luca-ferrari/blog-4.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/03/17/PerlWeeklyChallenge208.html#task2plperl diff --git a/challenge-208/luca-ferrari/blog-5.txt b/challenge-208/luca-ferrari/blog-5.txt new file mode 100644 index 0000000000..a3f589ad87 --- /dev/null +++ b/challenge-208/luca-ferrari/blog-5.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/03/17/PerlWeeklyChallenge208.html#task1plpgsql diff --git a/challenge-208/luca-ferrari/blog-6.txt b/challenge-208/luca-ferrari/blog-6.txt new file mode 100644 index 0000000000..c2cdc7716a --- /dev/null +++ b/challenge-208/luca-ferrari/blog-6.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/03/17/PerlWeeklyChallenge208.html#task2plpgsql diff --git a/challenge-208/luca-ferrari/postgresql/ch-1.plperl b/challenge-208/luca-ferrari/postgresql/ch-1.plperl new file mode 100644 index 0000000000..2fc60f38d0 --- /dev/null +++ b/challenge-208/luca-ferrari/postgresql/ch-1.plperl @@ -0,0 +1,38 @@ +-- +-- Perl Weekly Challenge 208 +-- Task 1 +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-208/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc208; + +/** + testdb=> select pwc208.task1_plperl( array['Perl', 'Raku', 'PHP']::text[], array['Raku', 'Perl', 'Java']::text[] ); + task1_plperl +-------------- + Perl + Raku +(2 rows) + +*/ +CREATE OR REPLACE FUNCTION +pwc208.task1_plperl( text[], text[] ) +RETURNS SETOF text +AS $CODE$ + my ( $first, $second ) = @_; + my %results; + + for my $a ( 0 .. $first->@* ) { + next if ! grep( $first->[ $a ], $second->@* ); + + my $b = ( grep( $first->[ $a ] eq $second->[ $_ ], 0 .. $second->@* ) )[ 0 ]; + push $results{ $a + $b }->@*, $first->[ $a ]; + } + + my $min = ( sort keys %results )[ 0 ]; + return_next( $_ ) for ( $results{ $min }->@* ); + +return undef; + +$CODE$ +LANGUAGE plperl; diff --git a/challenge-208/luca-ferrari/postgresql/ch-1.sql b/challenge-208/luca-ferrari/postgresql/ch-1.sql new file mode 100644 index 0000000000..fd626bdd31 --- /dev/null +++ b/challenge-208/luca-ferrari/postgresql/ch-1.sql @@ -0,0 +1,30 @@ +-- +-- Perl Weekly Challenge 208 +-- Task 1 +-- +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-208/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc208; + +CREATE OR REPLACE FUNCTION +pwc208.task1_plpgsql( f text[], s text[] ) +RETURNS SETOF TEXT +AS $CODE$ + WITH ta AS ( + SELECT t, row_number() over() AS v + FROM unnest( f ) t + ) + , tb AS ( + SELECT t, row_number() over() AS v + FROM unnest( s ) t + ) + , res AS ( + SELECT ta.t, ta.v + tb.v AS v + FROM ta JOIN tb ON ta.t = tb.t + ) + SELECT res.t + FROM res + WHERE res.v = (SELECT min( res.v ) FROM res ); +$CODE$ +LANGUAGE sql; diff --git a/challenge-208/luca-ferrari/postgresql/ch-2.plperl b/challenge-208/luca-ferrari/postgresql/ch-2.plperl new file mode 100644 index 0000000000..6e2f8666fc --- /dev/null +++ b/challenge-208/luca-ferrari/postgresql/ch-2.plperl @@ -0,0 +1,39 @@ +-- +-- Perl Weekly Challenge 208 +-- Task 2 +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-208/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc208; + +/* +testdb=> select pwc208.task2_plperl( array[ 1,2,2,4,5]::int[] ); + task2_plperl +-------------------------- + (2,"Duplicated value 2") + (3,"Missing value 3") +(2 rows) + +*/ +CREATE OR REPLACE FUNCTION +pwc208.task2_plperl( int[] ) +RETURNS TABLE( v int, d text ) +AS $CODE$ + my ( $list ) = @_; + my %results; + + my ( $min, $max ) = ( sort $list->@* )[0, -1]; + for my $needle ( $min .. $max ) { + $results{ $needle } += scalar grep { $_ == $needle } $list->@*; + } + + for ( sort keys %results ) { + next if $results{ $_ } == 1; + return_next( { v => $_, d => "Missing value $_" } ) if ( $results{ $_ } == 0 ); + return_next( { v => $_, d => "Duplicated value $_" } ) if ( $results{ $_ } > 1 ); + } + +return undef; + +$CODE$ +LANGUAGE plperl; diff --git a/challenge-208/luca-ferrari/postgresql/ch-2.sql b/challenge-208/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..01420d9428 --- /dev/null +++ b/challenge-208/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1,29 @@ +-- +-- Perl Weekly Challenge 208 +-- Task 2 +-- +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-208/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc208; + +CREATE OR REPLACE FUNCTION +pwc208.task2_plpgsql( l int[] ) +RETURNS TABLE( v int, d text ) +AS $CODE$ + WITH res AS ( + SELECT v, count( vv ) AS c + FROM generate_series( l[1], l[ array_length( l, 1 ) ] ) v + LEFT JOIN unnest( l ) vv ON vv = v + GROUP BY v + ) + SELECT v, 'Duplicated value ' || v + FROM res + WHERE c > 1 + UNION + SELECT v, 'Missing value ' || v + FROM res + WHERE c = 0; + +$CODE$ +LANGUAGE sql; diff --git a/challenge-208/luca-ferrari/raku/ch-1.p6 b/challenge-208/luca-ferrari/raku/ch-1.p6 new file mode 100644 index 0000000000..412271a097 --- /dev/null +++ b/challenge-208/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,20 @@ +#!raku + +# +# Perl Weekly Challenge 208 +# Task 1 +# +# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-208/> +# + +sub MAIN() { + my @first = < Perl Raku PHP Love >; + my @second = < Raku Perl Hate >; + my %results; + + for 0 ..^ @first.elems { + %results{ $_ + @second.first( @first[ $_ ], :k ) }.push: @first[ $_ ] if ( @second.grep: @first[ $_ ] ); + } + + %results{ %results.keys.min }.join( ',' ).say; +} diff --git a/challenge-208/luca-ferrari/raku/ch-2.p6 b/challenge-208/luca-ferrari/raku/ch-2.p6 new file mode 100644 index 0000000000..d05083bbad --- /dev/null +++ b/challenge-208/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,22 @@ +#!raku + +# +# Perl Weekly Challenge 208 +# Task 2 +# +# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-208/> +# + +sub MAIN( *@list where { @list.grep( * ~~ Int ).elems == @list.elems } ) { + my %results; + + for @list.min .. @list.max { + %results{ $_ } += @list.grep( $_ ).elems; + } + + + for %results.keys.sort { + "Duplicated value $_ (found { %results{ $_ } } times)".say if ( %results{ $_ } > 1 ); + "Missing value $_".say if ( %results{ $_ } == 0 ); + } +} |
