aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-06-21 22:54:46 +0100
committerGitHub <noreply@github.com>2022-06-21 22:54:46 +0100
commit4c7dd5e1103275aae3f40ad5a373798176d0b824 (patch)
tree451752d60ca26d92b0b3830212e51ea1be8905ee
parent524d19abc1aebe2bddaf77707da6f4a4d9f94b8f (diff)
parentde35abe364644618e3b81a958953543f7460e45f (diff)
downloadperlweeklychallenge-club-4c7dd5e1103275aae3f40ad5a373798176d0b824.tar.gz
perlweeklychallenge-club-4c7dd5e1103275aae3f40ad5a373798176d0b824.tar.bz2
perlweeklychallenge-club-4c7dd5e1103275aae3f40ad5a373798176d0b824.zip
Merge pull request #6302 from fluca1978/PWC170
Pwc170
-rw-r--r--challenge-170/luca-ferrari/blog-1.txt1
-rw-r--r--challenge-170/luca-ferrari/blog-2.txt1
-rw-r--r--challenge-170/luca-ferrari/blog-3.txt1
-rw-r--r--challenge-170/luca-ferrari/blog-4.txt1
-rw-r--r--challenge-170/luca-ferrari/blog-5.txt1
-rw-r--r--challenge-170/luca-ferrari/blog-6.txt1
-rw-r--r--challenge-170/luca-ferrari/postgresql/ch-1.plperl38
-rw-r--r--challenge-170/luca-ferrari/postgresql/ch-1.sql48
-rw-r--r--challenge-170/luca-ferrari/postgresql/ch-2.plperl45
-rw-r--r--challenge-170/luca-ferrari/postgresql/ch-2.sql17
-rwxr-xr-xchallenge-170/luca-ferrari/raku/ch-1.p617
-rwxr-xr-xchallenge-170/luca-ferrari/raku/ch-2.p620
12 files changed, 191 insertions, 0 deletions
diff --git a/challenge-170/luca-ferrari/blog-1.txt b/challenge-170/luca-ferrari/blog-1.txt
new file mode 100644
index 0000000000..dd5097f376
--- /dev/null
+++ b/challenge-170/luca-ferrari/blog-1.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/06/20/PerlWeeklyChallenge170.html#task1
diff --git a/challenge-170/luca-ferrari/blog-2.txt b/challenge-170/luca-ferrari/blog-2.txt
new file mode 100644
index 0000000000..8f897b9406
--- /dev/null
+++ b/challenge-170/luca-ferrari/blog-2.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/06/20/PerlWeeklyChallenge170.html#task2
diff --git a/challenge-170/luca-ferrari/blog-3.txt b/challenge-170/luca-ferrari/blog-3.txt
new file mode 100644
index 0000000000..234fa4f544
--- /dev/null
+++ b/challenge-170/luca-ferrari/blog-3.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/06/20/PerlWeeklyChallenge170.html#task1plperl
diff --git a/challenge-170/luca-ferrari/blog-4.txt b/challenge-170/luca-ferrari/blog-4.txt
new file mode 100644
index 0000000000..d0156eef54
--- /dev/null
+++ b/challenge-170/luca-ferrari/blog-4.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/06/20/PerlWeeklyChallenge170.html#task2plperl
diff --git a/challenge-170/luca-ferrari/blog-5.txt b/challenge-170/luca-ferrari/blog-5.txt
new file mode 100644
index 0000000000..41387c9868
--- /dev/null
+++ b/challenge-170/luca-ferrari/blog-5.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/06/20/PerlWeeklyChallenge170.html#task1plpgsql
diff --git a/challenge-170/luca-ferrari/blog-6.txt b/challenge-170/luca-ferrari/blog-6.txt
new file mode 100644
index 0000000000..2413e636d5
--- /dev/null
+++ b/challenge-170/luca-ferrari/blog-6.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/06/20/PerlWeeklyChallenge170.html#task2plpgsql
diff --git a/challenge-170/luca-ferrari/postgresql/ch-1.plperl b/challenge-170/luca-ferrari/postgresql/ch-1.plperl
new file mode 100644
index 0000000000..2f7e7d5d40
--- /dev/null
+++ b/challenge-170/luca-ferrari/postgresql/ch-1.plperl
@@ -0,0 +1,38 @@
+-- Perl Weekly Challenge 170
+-- Task 1
+
+CREATE SCHEMA IF NOT EXISTS pwc170;
+
+CREATE OR REPLACE FUNCTION
+pwc170.task1_plperl( int)
+RETURNS SETOF bigint
+AS $CODE$
+ my ($limit) = @_;
+
+ # utility function to check if a
+ # number if prime
+ my $is_prime = sub {
+ my ($value) = @_;
+ for my $i ( 2 .. $value - 1 ) {
+ return undef if $value % $i == 0;
+ }
+
+ return 1;
+ };
+
+
+ my @primes;
+ for ( 1 .. 999999 ) {
+ last if $#primes >= $limit;
+ next if ! $is_prime->( $_ );
+ push @primes, $_;
+
+ my $v = 1;
+ $v *= $_ for ( @primes );
+ return_next( $v );
+ }
+
+ return undef;
+
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-170/luca-ferrari/postgresql/ch-1.sql b/challenge-170/luca-ferrari/postgresql/ch-1.sql
new file mode 100644
index 0000000000..a94956f220
--- /dev/null
+++ b/challenge-170/luca-ferrari/postgresql/ch-1.sql
@@ -0,0 +1,48 @@
+-- Perl Weekly Challenge 170
+-- Task 1
+
+CREATE SCHEMA IF NOT EXISTS pwc170;
+
+CREATE OR REPLACE FUNCTION
+pwc170.is_prime( v bigint )
+RETURNS bool
+AS $code$
+DECLARE
+ i bigint;
+BEGIN
+ FOR i IN 2 .. v - 1 LOOP
+ IF v % i = 0 THEN
+ RETURN false;
+ END IF;
+ END LOOP;
+
+ RETURN TRUE;
+END
+$code$
+LANGUAGE plpgsql;
+
+
+CREATE OR REPLACE FUNCTION
+pwc170.task1_plpgsql( l int default 10 )
+RETURNS SETOF INT
+AS $CODE$
+DECLARE
+ v bigint := 1;
+ i bigint;
+BEGIN
+ FOR i IN SELECT n FROM generate_series( 1, 100000 ) n LOOP
+ IF pwc170.is_prime( i ) THEN
+ v := v * i;
+ l := l - 1;
+ RETURN NEXT v;
+ END IF;
+
+ IF l <= 0 THEN
+ RETURN;
+ END IF;
+ END LOOP;
+
+ RETURN;
+END
+$CODE$
+LANGUAGE plpgsql;
diff --git a/challenge-170/luca-ferrari/postgresql/ch-2.plperl b/challenge-170/luca-ferrari/postgresql/ch-2.plperl
new file mode 100644
index 0000000000..79ff672881
--- /dev/null
+++ b/challenge-170/luca-ferrari/postgresql/ch-2.plperl
@@ -0,0 +1,45 @@
+-- Perl Weekly Challenge 170
+-- Task 2
+
+create table if not exists a( a int, b int );
+truncate table a;
+insert into a values (1,2), (3,4);
+create table if not exists b( a int, b int );
+truncate table b;
+insert into b values (5,6), (7,8);
+
+CREATE SCHEMA IF NOT EXISTS pwc170;
+
+CREATE OR REPLACE FUNCTION
+pwc170.task2_plperl( text, text )
+RETURNS TABLE( a int, b int, c int, d int )
+AS $CODE$
+ my ( $table_a, $table_b ) = @_;
+ elog( DEBUG, "Reading tables $table_a and $table_b" );
+
+ my ( $rs_a, $rs_b );
+ $rs_a = spi_exec_query( "SELECT a,b FROM $table_a" );
+ $rs_b = spi_exec_query( "SELECT a,b FROM $table_b" );
+
+ for my $row_a ( 0 .. $rs_a->{ processed } - 1 ) {
+ elog( DEBUG, "Loop A $row_a out of " . $rs_a->{ processed } );
+ my ($aa, $ab) = ( $rs_a->{ rows }[ $row_a ]->{ a }, $rs_a->{ rows }[ $row_a ]->{ b } );
+
+ for my $row_b ( 0 .. $rs_b->{ processed } - 1 ) {
+ elog( DEBUG, "Loop B $row_b out of " . $rs_b->{ processed } );
+ my ($ba, $bb) = ( $rs_b->{ rows }[ $row_b ]->{ a }, $rs_b->{ rows }[ $row_b ]->{ b } );
+
+ elog( DEBUG, "Computing $aa $ab X* $ba $bb" );
+ my $result = {
+ a => $aa * $ba,
+ b => $aa * $bb,
+ c => $ab * $ba,
+ d => $ab * $bb,
+ };
+ return_next( $result );
+ }
+ }
+
+ return undef;
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-170/luca-ferrari/postgresql/ch-2.sql b/challenge-170/luca-ferrari/postgresql/ch-2.sql
new file mode 100644
index 0000000000..a58154c95b
--- /dev/null
+++ b/challenge-170/luca-ferrari/postgresql/ch-2.sql
@@ -0,0 +1,17 @@
+-- Perl Weekly Challenge 170
+-- Task 2
+
+CREATE SCHEMA IF NOT EXISTS pwc170;
+
+CREATE OR REPLACE FUNCTION
+pwc170.task2_plpgsql( ta text, tb text )
+RETURNS TABLE ( a int, b int, c int, d int )
+AS $CODE$
+DECLARE
+BEGIN
+ RETURN QUERY
+ EXECUTE format( 'SELECT a.a * b.a, a.a * b.b, a.b * b.a, a.b * b.b FROM %I a, %I b',
+ ta, tb );
+END
+$CODE$
+LANGUAGE plpgsql;
diff --git a/challenge-170/luca-ferrari/raku/ch-1.p6 b/challenge-170/luca-ferrari/raku/ch-1.p6
new file mode 100755
index 0000000000..4e6261b9f6
--- /dev/null
+++ b/challenge-170/luca-ferrari/raku/ch-1.p6
@@ -0,0 +1,17 @@
+#!raku
+
+# Perl Weekly Challenge 170
+
+sub MAIN( Int $limit = 10 ) {
+
+ my @primes;
+ my @primordial = lazy gather {
+ for ( 1 .. Inf ) {
+ next if ! .is-prime;
+ @primes.push: $_;
+ take [*] @primes;
+ }
+ };
+
+ @primordial[ 0 .. $limit ].join( "\n" ).say;
+}
diff --git a/challenge-170/luca-ferrari/raku/ch-2.p6 b/challenge-170/luca-ferrari/raku/ch-2.p6
new file mode 100755
index 0000000000..1275b333ed
--- /dev/null
+++ b/challenge-170/luca-ferrari/raku/ch-2.p6
@@ -0,0 +1,20 @@
+#!raku
+
+# Perl Weekly Challenge 170
+
+sub MAIN() {
+
+ my @a = [1, 2], [3, 4];
+ my @b = [5, 6], [7, 8];
+
+ my @result;
+
+ for 0 ..^ @a.elems -> $row_a {
+ for 0 ..^ @b.elems -> $row_b {
+ @result.push: [ @a[ $row_a ].List X* @b[ $row_b ].List ];
+ }
+ }
+
+ @result.join( "\n" ).say;
+
+}