diff options
| author | Paulo Custodio <pauloscustodio@gmail.com> | 2022-04-12 18:56:29 +0100 |
|---|---|---|
| committer | Paulo Custodio <pauloscustodio@gmail.com> | 2022-04-12 18:56:29 +0100 |
| commit | 49f7f459092f538b5468e255ff4e8ebac490d70a (patch) | |
| tree | fa4a94a8207a58a56d4dca98ff22d39bed047f6e /challenge-159/luca-ferrari/postgresql/ch-1.sql | |
| parent | 1711da4f548d3134248cd5e02a13d71762d5e4cb (diff) | |
| parent | 72ba70a96cfd587443c3eaa0f5ba02e3557f4b82 (diff) | |
| download | perlweeklychallenge-club-49f7f459092f538b5468e255ff4e8ebac490d70a.tar.gz perlweeklychallenge-club-49f7f459092f538b5468e255ff4e8ebac490d70a.tar.bz2 perlweeklychallenge-club-49f7f459092f538b5468e255ff4e8ebac490d70a.zip | |
Merge remote-tracking branch 'upstream/master'
# Conflicts:
# challenge-160/paulo-custodio/Makefile
Diffstat (limited to 'challenge-159/luca-ferrari/postgresql/ch-1.sql')
| -rw-r--r-- | challenge-159/luca-ferrari/postgresql/ch-1.sql | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/challenge-159/luca-ferrari/postgresql/ch-1.sql b/challenge-159/luca-ferrari/postgresql/ch-1.sql new file mode 100644 index 0000000000..1ebd6c5112 --- /dev/null +++ b/challenge-159/luca-ferrari/postgresql/ch-1.sql @@ -0,0 +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; |
