aboutsummaryrefslogtreecommitdiff
path: root/challenge-159/luca-ferrari/postgresql
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2022-04-04 10:34:19 +0200
committerLuca Ferrari <fluca1978@gmail.com>2022-04-04 10:34:19 +0200
commit8409efbb8a1f588f4bb1d0e4134cdc03b6c6d7f8 (patch)
tree4ab0895656945f902fe06ffa1935bf088d106225 /challenge-159/luca-ferrari/postgresql
parentb91c8355370302f29a2380e43685737ff644b9f2 (diff)
downloadperlweeklychallenge-club-8409efbb8a1f588f4bb1d0e4134cdc03b6c6d7f8.tar.gz
perlweeklychallenge-club-8409efbb8a1f588f4bb1d0e4134cdc03b6c6d7f8.tar.bz2
perlweeklychallenge-club-8409efbb8a1f588f4bb1d0e4134cdc03b6c6d7f8.zip
Task 1 done in plpgsql
Diffstat (limited to 'challenge-159/luca-ferrari/postgresql')
-rw-r--r--challenge-159/luca-ferrari/postgresql/ch-1.sql69
1 files changed, 69 insertions, 0 deletions
diff --git a/challenge-159/luca-ferrari/postgresql/ch-1.sql b/challenge-159/luca-ferrari/postgresql/ch-1.sql
index da8824c0c2..1ebd6c5112 100644
--- a/challenge-159/luca-ferrari/postgresql/ch-1.sql
+++ b/challenge-159/luca-ferrari/postgresql/ch-1.sql
@@ -1 +1,70 @@
-- Perl Weekly Challenge 159
+
+
+CREATE SCHEMA IF NOT EXISTS pwc159;
+
+
+CREATE OR REPLACE FUNCTION
+pwc159.farey_not_unique( n int )
+RETURNS TABLE( f text, v numeric )
+AS $CODE$
+DECLARE
+ numerator int;
+ denominator int;
+ dd int;
+ nn int;
+BEGIN
+
+ -- bootstrap term
+ SELECT '0/1', 0
+ INTO f, v;
+
+ RETURN NEXT;
+
+
+ FOR denominator IN 2 .. n LOOP
+ FOR numerator IN 1 .. denominator LOOP
+ nn := numerator;
+ dd := denominator;
+
+ IF dd % nn = 0 THEN
+ dd := dd / nn;
+ nn := 1;
+ END IF;
+
+ IF nn % dd = 0 THEN
+ nn := nn / dd;
+ dd := 1;
+ END IF;
+
+ IF nn / dd = 1 THEN
+ CONTINUE;
+ END IF;
+
+ SELECT nn || '/' || dd, nn/dd::numeric
+ INTO f, v;
+
+ RETURN NEXT;
+
+ END LOOP;
+ END LOOP;
+
+ -- end term
+ SELECT '1/1', 1
+ INTO f, v;
+
+ RETURN NEXT;
+
+RETURN;
+END
+$CODE$
+LANGUAGE plpgsql;
+
+
+WITH farey AS (
+ SELECT distinct( f ), v
+ FROM pwc159.farey_not_unique( 5 )
+ ORDER BY v
+)
+SELECT f
+FROM farey;