diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-09-17 23:24:11 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-17 23:24:11 +0100 |
| commit | 5791f3cd997b180c5cfede0a95cb43639db9f341 (patch) | |
| tree | c3a0a8cdf4b6058d19765220038447ab04c577ba /challenge-234 | |
| parent | 50aeb058ffa98a3291c10c50bd27a3bcaf58e1fe (diff) | |
| parent | 8258b67ae7a11a66fc2f8ef4a70696e45da4211c (diff) | |
| download | perlweeklychallenge-club-5791f3cd997b180c5cfede0a95cb43639db9f341.tar.gz perlweeklychallenge-club-5791f3cd997b180c5cfede0a95cb43639db9f341.tar.bz2 perlweeklychallenge-club-5791f3cd997b180c5cfede0a95cb43639db9f341.zip | |
Merge pull request #8715 from fluca1978/PWC234
Pwc234
Diffstat (limited to 'challenge-234')
| -rw-r--r-- | challenge-234/luca-ferrari/blog-1.txt | 1 | ||||
| -rw-r--r-- | challenge-234/luca-ferrari/blog-2.txt | 1 | ||||
| -rw-r--r-- | challenge-234/luca-ferrari/blog-3.txt | 1 | ||||
| -rw-r--r-- | challenge-234/luca-ferrari/blog-4.txt | 1 | ||||
| -rw-r--r-- | challenge-234/luca-ferrari/blog-5.txt | 1 | ||||
| -rw-r--r-- | challenge-234/luca-ferrari/blog-6.txt | 1 | ||||
| -rw-r--r-- | challenge-234/luca-ferrari/postgresql/ch-1.plperl | 31 | ||||
| -rw-r--r-- | challenge-234/luca-ferrari/postgresql/ch-1.sql | 33 | ||||
| -rw-r--r-- | challenge-234/luca-ferrari/postgresql/ch-2.plperl | 28 | ||||
| -rw-r--r-- | challenge-234/luca-ferrari/postgresql/ch-2.sql | 30 | ||||
| -rw-r--r-- | challenge-234/luca-ferrari/raku/ch-1.p6 | 22 | ||||
| -rw-r--r-- | challenge-234/luca-ferrari/raku/ch-2.p6 | 25 |
12 files changed, 175 insertions, 0 deletions
diff --git a/challenge-234/luca-ferrari/blog-1.txt b/challenge-234/luca-ferrari/blog-1.txt new file mode 100644 index 0000000000..ba8c92a58c --- /dev/null +++ b/challenge-234/luca-ferrari/blog-1.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/09/17/PerlWeeklyChallenge234.html#task1 diff --git a/challenge-234/luca-ferrari/blog-2.txt b/challenge-234/luca-ferrari/blog-2.txt new file mode 100644 index 0000000000..96f227c475 --- /dev/null +++ b/challenge-234/luca-ferrari/blog-2.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/09/17/PerlWeeklyChallenge234.html#task2 diff --git a/challenge-234/luca-ferrari/blog-3.txt b/challenge-234/luca-ferrari/blog-3.txt new file mode 100644 index 0000000000..a445252265 --- /dev/null +++ b/challenge-234/luca-ferrari/blog-3.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/09/17/PerlWeeklyChallenge234.html#task1plperl diff --git a/challenge-234/luca-ferrari/blog-4.txt b/challenge-234/luca-ferrari/blog-4.txt new file mode 100644 index 0000000000..2b8aa27b83 --- /dev/null +++ b/challenge-234/luca-ferrari/blog-4.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/09/17/PerlWeeklyChallenge234.html#task2plperl diff --git a/challenge-234/luca-ferrari/blog-5.txt b/challenge-234/luca-ferrari/blog-5.txt new file mode 100644 index 0000000000..e3dbf7d267 --- /dev/null +++ b/challenge-234/luca-ferrari/blog-5.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/09/17/PerlWeeklyChallenge234.html#task1plpgsql diff --git a/challenge-234/luca-ferrari/blog-6.txt b/challenge-234/luca-ferrari/blog-6.txt new file mode 100644 index 0000000000..7b5b4a2ef4 --- /dev/null +++ b/challenge-234/luca-ferrari/blog-6.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2023/09/17/PerlWeeklyChallenge234.html#task2plpgsql diff --git a/challenge-234/luca-ferrari/postgresql/ch-1.plperl b/challenge-234/luca-ferrari/postgresql/ch-1.plperl new file mode 100644 index 0000000000..6edef0543c --- /dev/null +++ b/challenge-234/luca-ferrari/postgresql/ch-1.plperl @@ -0,0 +1,31 @@ +-- +-- Perl Weekly Challenge 234 +-- Task 1 +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-234/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc234; + +CREATE OR REPLACE FUNCTION +pwc234.task1_plperl( text[] ) +RETURNS SETOF char +AS $CODE$ + my ( $words ) = @_; + + my $chars = {}; + + for my $current_word ( $words->@* ) { + for my $current_char ( sort split //, $current_word ) { + if ( ! grep { $_ eq $current_word } $chars->{ $current_char }->@* ) { + push $chars->{ $current_char }->@*, $current_word; + } + } + } + + for my $current_char ( keys $chars->%* ) { + return_next( $current_char ) if ( $chars->{ $current_char }->@* == scalar $words->@* ); + } + + return undef; +$CODE$ +LANGUAGE plperl; diff --git a/challenge-234/luca-ferrari/postgresql/ch-1.sql b/challenge-234/luca-ferrari/postgresql/ch-1.sql new file mode 100644 index 0000000000..14e45492f1 --- /dev/null +++ b/challenge-234/luca-ferrari/postgresql/ch-1.sql @@ -0,0 +1,33 @@ +-- +-- Perl Weekly Challenge 234 +-- Task 1 +-- +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-234/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc234; + +CREATE OR REPLACE FUNCTION +pwc234.task1_plpgsql( words text[] ) +RETURNS SETOF char +AS $CODE$ +DECLARE + w text; +BEGIN + CREATE TEMPORARY TABLE IF NOT EXISTS chars( c char, word text ); + TRUNCATE chars; + + FOREACH w IN ARRAY words LOOP + INSERT INTO chars + SELECT c, w + FROM regexp_split_to_table( w, '' ) c; + END LOOP; + + RETURN QUERY + SELECT c + FROM chars + GROUP BY c + HAVING count( word ) >= array_length( words, 1 ); +END +$CODE$ +LANGUAGE plpgsql; diff --git a/challenge-234/luca-ferrari/postgresql/ch-2.plperl b/challenge-234/luca-ferrari/postgresql/ch-2.plperl new file mode 100644 index 0000000000..ac85075a2a --- /dev/null +++ b/challenge-234/luca-ferrari/postgresql/ch-2.plperl @@ -0,0 +1,28 @@ +-- +-- Perl Weekly Challenge 234 +-- Task 2 +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-234/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc234; + +CREATE OR REPLACE FUNCTION +pwc234.task2_plperl( int[] ) +RETURNS TABLE( i int, j int, k int ) +AS $CODE$ + my ( $nums ) = @_; + + for my $i ( 0 .. $nums->@* - 3 ) { + for my $j ( $i + 1 .. $nums->@* - 2 ) { + for my $k ( $j + 1 .. $nums->@* - 1 ) { + return_next( { i => $i, j => $j, k => $k } ) + if ( $nums->[ $i ] != $nums->[ $j ] + && $nums->[ $j ] != $nums->[ $k ] + && $nums->[ $k ] != $nums->[ $i ] ); + } + } + } + + return undef; +$CODE$ +LANGUAGE plperl; diff --git a/challenge-234/luca-ferrari/postgresql/ch-2.sql b/challenge-234/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..1279f673ce --- /dev/null +++ b/challenge-234/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1,30 @@ +-- +-- Perl Weekly Challenge 234 +-- Task 2 +-- +-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-234/> +-- + +CREATE SCHEMA IF NOT EXISTS pwc234; + +CREATE OR REPLACE FUNCTION +pwc234.task2_plpgsql( nums int[] ) +RETURNS TABLE (ii int, jj int, kk int ) +AS $CODE$ +BEGIN + FOR i IN 1 .. array_length( nums, 1 ) - 2 LOOP + FOR j IN i + 1 .. array_length( nums, 1 ) - 1 LOOP + FOR k IN j + 1 .. array_length( nums, 1 ) LOOP + IF nums[i] <> nums[j] AND nums[j] <> nums[k] AND nums[k] <> nums[i] THEN + raise info '% % %', i, j, k; + ii := i; + jj := j; + kk := k; + RETURN NEXT; + END IF; + END LOOP; + END LOOP; + END LOOP; +END +$CODE$ +LANGUAGE plpgsql; diff --git a/challenge-234/luca-ferrari/raku/ch-1.p6 b/challenge-234/luca-ferrari/raku/ch-1.p6 new file mode 100644 index 0000000000..057b34229a --- /dev/null +++ b/challenge-234/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,22 @@ +#!raku + +# +# Perl Weekly Challenge 234 +# Task 1 +# +# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-234/> +# + +sub MAIN( *@words ) { + my %chars; + for @words -> $current_word { + for $current_word.comb.unique.sort { + %chars{ $_ }.push: $current_word; + } + } + + for %chars.kv -> $char, $list { + say $char if $list.elems == @words.elems; + } + +} diff --git a/challenge-234/luca-ferrari/raku/ch-2.p6 b/challenge-234/luca-ferrari/raku/ch-2.p6 new file mode 100644 index 0000000000..9a82b56cc1 --- /dev/null +++ b/challenge-234/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,25 @@ +#!raku + +# +# Perl Weekly Challenge 234 +# Task 2 +# +# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-234/> +# + +sub MAIN( *@nums where { @nums.grep( * ~~ Int ).elems == @nums.elems } ) { + my @triples; + + #(i, j, k) that satisfies num[i] != num[j], num[j] != num[k] and num[k] != num[i]. + for 0 ..^ @nums.elems - 2 -> $i { + for $i ^..^ @nums.elems - 1 -> $j { + for $j ^..^ @nums.elems -> $k { + @triples.push: [ $i, $j, $k ] if ( @nums[ $i ] != @nums[ $j ] + && @nums[ $j ] != @nums[ $k ] + && @nums[ $k ] != @nums[ $i ] ); + } + } + } + + @triples.join( "\n" ).say; +} |
