aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2021-11-08 11:54:56 +0100
committerLuca Ferrari <fluca1978@gmail.com>2021-11-08 11:54:56 +0100
commita88b97a7e70760872d0e619613600da8b6e52486 (patch)
tree6b983a738b0d35736a4f50281c7a25a3f7d50ed0
parente67fe0eaab37d906faa15774a343ea9bb7fbe691 (diff)
downloadperlweeklychallenge-club-a88b97a7e70760872d0e619613600da8b6e52486.tar.gz
perlweeklychallenge-club-a88b97a7e70760872d0e619613600da8b6e52486.tar.bz2
perlweeklychallenge-club-a88b97a7e70760872d0e619613600da8b6e52486.zip
PWC 136 in PostgreSQL
-rw-r--r--challenge-136/luca-ferrari/postgresql/ch-1.sql16
-rw-r--r--challenge-136/luca-ferrari/postgresql/ch-2.sql29
2 files changed, 45 insertions, 0 deletions
diff --git a/challenge-136/luca-ferrari/postgresql/ch-1.sql b/challenge-136/luca-ferrari/postgresql/ch-1.sql
new file mode 100644
index 0000000000..ebf5d2becb
--- /dev/null
+++ b/challenge-136/luca-ferrari/postgresql/ch-1.sql
@@ -0,0 +1,16 @@
+CREATE OR REPLACE FUNCTION task1( a int, b int )
+ RETURNS int
+AS $CODE$
+ SELECT gcd( a, b ) % 2;
+ $CODE$
+ LANGUAGE SQL;
+
+/*
+ Example of invocation:
+
+ testdb=> SELECT task1( 8, 24 ) as a8_24, task1( 26, 39 ) as a26_39, task1( 4, 10 ) as a4_10;
+ -[ RECORD 1 ]
+ a8_24 | 0
+ a26_39 | 1
+ a4_10 | 0
+*/
diff --git a/challenge-136/luca-ferrari/postgresql/ch-2.sql b/challenge-136/luca-ferrari/postgresql/ch-2.sql
new file mode 100644
index 0000000000..5436ec8456
--- /dev/null
+++ b/challenge-136/luca-ferrari/postgresql/ch-2.sql
@@ -0,0 +1,29 @@
+
+CREATE OR REPLACE FUNCTION task2( l int default 16)
+ RETURNS SETOF text
+ AS $CODE$
+
+WITH RECURSIVE
+ fib( p, n ) AS (
+ SELECT 1 as p, 1 as n
+ UNION
+ SELECT n, p + n FROM fib WHERE n < l
+ )
+ , permutations AS (
+ SELECT n::text as perm_n, n as perm_sum, array[ 1 ] as pivot
+ FROM fib
+ UNION ALL
+ SELECT permutations.perm_n || ',' || fib.n, perm_sum + fib.n, array_append( pivot, fib.n )
+ FROM permutations, fib
+ WHERE fib.n < l
+ AND position( fib.n::text in perm_n ) = 0
+
+ )
+ , results as (
+ SELECT array( SELECT perm_n FROM permutations )
+ )
+ SELECT *
+ FROM results;
+
+ $CODE$
+ LANGUAGE sql;