diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2021-10-29 18:36:57 +0200 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2021-10-29 18:36:57 +0200 |
| commit | b90fe902e06fa33e66b75c3408a988812f93c3ed (patch) | |
| tree | d199061178c9df4055fb3fa570ed7508e6ddb0d2 /challenge-136 | |
| parent | 2d5b702c9a348f2226fca9c981f0054c485aa1dd (diff) | |
| download | perlweeklychallenge-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.sql | 24 | ||||
| -rw-r--r-- | challenge-136/luca-ferrari/postgresql/ch-2.sql | 33 |
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; |
