aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2021-11-29 16:22:22 +0100
committerLuca Ferrari <fluca1978@gmail.com>2021-11-29 16:22:22 +0100
commit705640f5611e95eb41001b853b84c6b3d1bd22bd (patch)
tree90f1474533baba699b7aaf715d6a457c0cea063c
parentc62eea0af3ad4e45249f0c17ea597f2b220aad60 (diff)
downloadperlweeklychallenge-club-705640f5611e95eb41001b853b84c6b3d1bd22bd.tar.gz
perlweeklychallenge-club-705640f5611e95eb41001b853b84c6b3d1bd22bd.tar.bz2
perlweeklychallenge-club-705640f5611e95eb41001b853b84c6b3d1bd22bd.zip
Task 2 in PostgreSQL
-rw-r--r--challenge-141/luca-ferrari/postgresql/ch-2.sql21
1 files changed, 21 insertions, 0 deletions
diff --git a/challenge-141/luca-ferrari/postgresql/ch-2.sql b/challenge-141/luca-ferrari/postgresql/ch-2.sql
new file mode 100644
index 0000000000..239d846b58
--- /dev/null
+++ b/challenge-141/luca-ferrari/postgresql/ch-2.sql
@@ -0,0 +1,21 @@
+CREATE OR REPLACE FUNCTION
+f_live_numbers( m int, n int )
+RETURNS SETOF int
+AS $CODE$
+WITH RECURSIVE
+numbers AS ( SELECT unnest( regexp_split_to_array( m::text, '' ) ) AS n )
+, combinations( i, v, c ) AS (
+SELECT 1, n, n
+FROM numbers
+UNION
+SELECT i + 1, n, c || num.n
+FROM combinations, numbers num
+WHERE length( c || num.n ) < length( m::text ) - 1
+AND num.n IN ( SELECT n FROM numbers WHERE n::int > i )
+)
+
+SELECT c::int FROM combinations
+WHERE c::int % n = 0;
+
+$CODE$
+LANGUAGE sql;