diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-06-21 22:54:46 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-21 22:54:46 +0100 |
| commit | 4c7dd5e1103275aae3f40ad5a373798176d0b824 (patch) | |
| tree | 451752d60ca26d92b0b3830212e51ea1be8905ee | |
| parent | 524d19abc1aebe2bddaf77707da6f4a4d9f94b8f (diff) | |
| parent | de35abe364644618e3b81a958953543f7460e45f (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-170/luca-ferrari/blog-2.txt | 1 | ||||
| -rw-r--r-- | challenge-170/luca-ferrari/blog-3.txt | 1 | ||||
| -rw-r--r-- | challenge-170/luca-ferrari/blog-4.txt | 1 | ||||
| -rw-r--r-- | challenge-170/luca-ferrari/blog-5.txt | 1 | ||||
| -rw-r--r-- | challenge-170/luca-ferrari/blog-6.txt | 1 | ||||
| -rw-r--r-- | challenge-170/luca-ferrari/postgresql/ch-1.plperl | 38 | ||||
| -rw-r--r-- | challenge-170/luca-ferrari/postgresql/ch-1.sql | 48 | ||||
| -rw-r--r-- | challenge-170/luca-ferrari/postgresql/ch-2.plperl | 45 | ||||
| -rw-r--r-- | challenge-170/luca-ferrari/postgresql/ch-2.sql | 17 | ||||
| -rwxr-xr-x | challenge-170/luca-ferrari/raku/ch-1.p6 | 17 | ||||
| -rwxr-xr-x | challenge-170/luca-ferrari/raku/ch-2.p6 | 20 |
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; + +} |
