aboutsummaryrefslogtreecommitdiff
path: root/challenge-234
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2023-09-17 23:24:11 +0100
committerGitHub <noreply@github.com>2023-09-17 23:24:11 +0100
commit5791f3cd997b180c5cfede0a95cb43639db9f341 (patch)
treec3a0a8cdf4b6058d19765220038447ab04c577ba /challenge-234
parent50aeb058ffa98a3291c10c50bd27a3bcaf58e1fe (diff)
parent8258b67ae7a11a66fc2f8ef4a70696e45da4211c (diff)
downloadperlweeklychallenge-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.txt1
-rw-r--r--challenge-234/luca-ferrari/blog-2.txt1
-rw-r--r--challenge-234/luca-ferrari/blog-3.txt1
-rw-r--r--challenge-234/luca-ferrari/blog-4.txt1
-rw-r--r--challenge-234/luca-ferrari/blog-5.txt1
-rw-r--r--challenge-234/luca-ferrari/blog-6.txt1
-rw-r--r--challenge-234/luca-ferrari/postgresql/ch-1.plperl31
-rw-r--r--challenge-234/luca-ferrari/postgresql/ch-1.sql33
-rw-r--r--challenge-234/luca-ferrari/postgresql/ch-2.plperl28
-rw-r--r--challenge-234/luca-ferrari/postgresql/ch-2.sql30
-rw-r--r--challenge-234/luca-ferrari/raku/ch-1.p622
-rw-r--r--challenge-234/luca-ferrari/raku/ch-2.p625
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;
+}