aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2022-04-04 11:06:28 +0200
committerLuca Ferrari <fluca1978@gmail.com>2022-04-04 11:06:28 +0200
commitd6c45c1e8fbd72ec613baff00a8214a270f3f6cb (patch)
tree03e2a14b035bb6c23fd85222f448b2a4db4d274f
parentafb541c10466df9d9ca45c17f3056fd11a016e47 (diff)
downloadperlweeklychallenge-club-d6c45c1e8fbd72ec613baff00a8214a270f3f6cb.tar.gz
perlweeklychallenge-club-d6c45c1e8fbd72ec613baff00a8214a270f3f6cb.tar.bz2
perlweeklychallenge-club-d6c45c1e8fbd72ec613baff00a8214a270f3f6cb.zip
Task 2 done in plpgsql
-rw-r--r--challenge-159/luca-ferrari/postgresql/ch-2.sql42
1 files changed, 42 insertions, 0 deletions
diff --git a/challenge-159/luca-ferrari/postgresql/ch-2.sql b/challenge-159/luca-ferrari/postgresql/ch-2.sql
index da8824c0c2..d165df2fed 100644
--- a/challenge-159/luca-ferrari/postgresql/ch-2.sql
+++ b/challenge-159/luca-ferrari/postgresql/ch-2.sql
@@ -1 +1,43 @@
-- Perl Weekly Challenge 159
+
+CREATE SCHEMA IF NOT EXISTS pwc159;
+
+CREATE OR REPLACE FUNCTION
+pwc159.prime_factors( n int )
+RETURNS SETOF int
+AS $CODE$
+DECLARE
+ factor int;
+BEGIN
+ factor := 2;
+
+ WHILE ( factor <= n AND n > 1 ) LOOP
+ IF n % factor = 0 THEN
+ n := n / factor;
+ RETURN NEXT factor;
+ ELSE
+ factor := factor + 1;
+ END IF;
+ END LOOP;
+
+ RETURN;
+END
+$CODE$
+LANGUAGE plpgsql;
+
+
+\set n 5
+
+WITH count_prime_factors( c, cc ) AS
+(
+ SELECT count( distinct pf ), count( pf )
+ FROM pwc159.prime_factors( :n ) pf
+)
+SELECT :n AS number,
+ CASE
+ WHEN c - cc <> 0 THEN 0
+ WHEN c % 2 = 0 THEN 1
+ ELSE -1
+ END
+
+FROM count_prime_factors;