aboutsummaryrefslogtreecommitdiff
path: root/challenge-137/luca-ferrari/postgresql/ch-2.sql
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2021-11-01 11:38:21 +0100
committerLuca Ferrari <fluca1978@gmail.com>2021-11-01 11:38:21 +0100
commit9033acb1a25d205c9fe4b3c0b0efede574a86416 (patch)
treead91501a8f1bb18fbc195cdf9a29e881c5b7bf14 /challenge-137/luca-ferrari/postgresql/ch-2.sql
parentc22ce4b14b260b7acd1f536c6bfdb4ebf3e42dbb (diff)
downloadperlweeklychallenge-club-9033acb1a25d205c9fe4b3c0b0efede574a86416.tar.gz
perlweeklychallenge-club-9033acb1a25d205c9fe4b3c0b0efede574a86416.tar.bz2
perlweeklychallenge-club-9033acb1a25d205c9fe4b3c0b0efede574a86416.zip
Solutions in PostgreSQL
Diffstat (limited to 'challenge-137/luca-ferrari/postgresql/ch-2.sql')
-rw-r--r--challenge-137/luca-ferrari/postgresql/ch-2.sql36
1 files changed, 36 insertions, 0 deletions
diff --git a/challenge-137/luca-ferrari/postgresql/ch-2.sql b/challenge-137/luca-ferrari/postgresql/ch-2.sql
new file mode 100644
index 0000000000..ed96d27b8f
--- /dev/null
+++ b/challenge-137/luca-ferrari/postgresql/ch-2.sql
@@ -0,0 +1,36 @@
+/*
+testdb=> select * from f_lychrel( 59, true );
+INFO: Found 1111 after 3 iterations
+f_lychrel
+-----------
+0
+*/
+CREATE OR REPLACE FUNCTION
+f_lychrel( n int, verb boolean default false )
+RETURNS smallint
+AS $CODE$
+DECLARE
+ result bigint := n;
+ iteration int := 0;
+BEGIN
+ IF n < 10 OR n > 10000 THEN
+ RAISE 'n is out of bounds!';
+ END IF;
+
+ WHILE result < 10000000 AND iteration < 500 LOOP
+ iteration = iteration + 1;
+ result = result + reverse( result::text )::int;
+ IF result = reverse( result::text )::int THEN
+ IF verb THEN
+ RAISE INFO 'Found % after % iterations', result, iteration;
+ END IF;
+
+ RETURN 0;
+ END IF;
+
+ END LOOP;
+
+ RETURN 1;
+END
+$CODE$
+LANGUAGE plpgsql;