aboutsummaryrefslogtreecommitdiff
path: root/challenge-136
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2021-10-29 18:36:57 +0200
committerLuca Ferrari <fluca1978@gmail.com>2021-10-29 18:36:57 +0200
commitb90fe902e06fa33e66b75c3408a988812f93c3ed (patch)
treed199061178c9df4055fb3fa570ed7508e6ddb0d2 /challenge-136
parent2d5b702c9a348f2226fca9c981f0054c485aa1dd (diff)
downloadperlweeklychallenge-club-b90fe902e06fa33e66b75c3408a988812f93c3ed.tar.gz
perlweeklychallenge-club-b90fe902e06fa33e66b75c3408a988812f93c3ed.tar.bz2
perlweeklychallenge-club-b90fe902e06fa33e66b75c3408a988812f93c3ed.zip
Task solved as PostgreSQL functions
Diffstat (limited to 'challenge-136')
-rw-r--r--challenge-136/luca-ferrari/postgresql/ch-1.sql24
-rw-r--r--challenge-136/luca-ferrari/postgresql/ch-2.sql33
2 files changed, 57 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..ed1f0c71a0
--- /dev/null
+++ b/challenge-136/luca-ferrari/postgresql/ch-1.sql
@@ -0,0 +1,24 @@
+/*
+testdb=> SELECT FRIENDLY( 26, 39 );
+friendly
+----------
+0
+(1 row)
+
+testdb=> SELECT FRIENDLY( 26, 52 );
+friendly
+----------
+1
+(1 row)
+
+*/
+CREATE OR REPLACE FUNCTION friendly( m int, n int )
+RETURNS int
+AS $CODE$
+ SELECT
+ CASE gcd( m, n ) % 2
+ WHEN 0 THEN 1
+ ELSE 0
+ END;
+$CODE$
+LANGUAGE SQL;
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..e1f6439ec0
--- /dev/null
+++ b/challenge-136/luca-ferrari/postgresql/ch-2.sql
@@ -0,0 +1,33 @@
+CREATE OR REPLACE FUNCTION fibonacci_sum( l int DEFAULT 16 )
+RETURNS bigint
+AS $CODE$
+
+WITH RECURSIVE
+fibonacci( n, p ) AS
+(
+ SELECT 1, 1
+ UNION
+ SELECT p + n, n
+ FROM fibonacci
+ WHERE n < l
+)
+, permutations AS
+(
+ SELECT n::text AS current_value, n as total_sum
+ FROM fibonacci
+ UNION
+ SELECT current_value || ',' || n, total_sum + n
+ FROM permutations, fibonacci
+ WHERE
+ position( n::text in current_value ) = 0
+ AND n > ALL( string_to_array( current_value, ',' )::int[] )
+
+
+)
+SELECT count(*)
+FROM permutations
+WHERE total_sum = l
+;
+
+$CODE$
+LANGUAGE SQL;