aboutsummaryrefslogtreecommitdiff
path: root/challenge-258/luca-ferrari/plpgsql
diff options
context:
space:
mode:
author冯昶 <fengchang@novel-supertv.com>2024-03-04 16:39:31 +0800
committer冯昶 <fengchang@novel-supertv.com>2024-03-04 16:39:31 +0800
commit8edd4508d3af07ed272eec6ceeca1a9789b5e68a (patch)
tree2db742aea75a7a3005575c04a7e44da6d5c88a1f /challenge-258/luca-ferrari/plpgsql
parentd64db60d9dcf17d59060a03f5b1fbc5e82fc1953 (diff)
parentad381c1123e47114d3d98f1749f9f354eebafcdd (diff)
downloadperlweeklychallenge-club-8edd4508d3af07ed272eec6ceeca1a9789b5e68a.tar.gz
perlweeklychallenge-club-8edd4508d3af07ed272eec6ceeca1a9789b5e68a.tar.bz2
perlweeklychallenge-club-8edd4508d3af07ed272eec6ceeca1a9789b5e68a.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-258/luca-ferrari/plpgsql')
-rw-r--r--challenge-258/luca-ferrari/plpgsql/ch-1.sql22
-rw-r--r--challenge-258/luca-ferrari/plpgsql/ch-2.sql32
2 files changed, 54 insertions, 0 deletions
diff --git a/challenge-258/luca-ferrari/plpgsql/ch-1.sql b/challenge-258/luca-ferrari/plpgsql/ch-1.sql
new file mode 100644
index 0000000000..7e02f746b8
--- /dev/null
+++ b/challenge-258/luca-ferrari/plpgsql/ch-1.sql
@@ -0,0 +1,22 @@
+--
+-- Perl Weekly Challenge 258
+-- Task 1
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-258>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc258;
+
+CREATE OR REPLACE FUNCTION
+pwc258.task1_plpgsql( nums int[] )
+RETURNS int
+AS $CODE$
+ WITH q_nums AS (
+ SELECT v, array_length( regexp_split_to_array( v::text, '' ), 1 ) as c
+ FROM unnest( nums ) v
+ )
+ SELECT count( * )
+ FROM q_nums
+ WHERE c % 2 = 0;
+
+$CODE$
+LANGUAGE sql;
diff --git a/challenge-258/luca-ferrari/plpgsql/ch-2.sql b/challenge-258/luca-ferrari/plpgsql/ch-2.sql
new file mode 100644
index 0000000000..3241facae4
--- /dev/null
+++ b/challenge-258/luca-ferrari/plpgsql/ch-2.sql
@@ -0,0 +1,32 @@
+--
+-- Perl Weekly Challenge 258
+-- Task 2
+-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-258>
+--
+
+CREATE SCHEMA IF NOT EXISTS pwc258;
+
+CREATE OR REPLACE FUNCTION
+pwc258.task2_plpgsql( k int, nums int[] )
+RETURNS int
+AS $CODE$
+DECLARE
+ v_sum int := 0;
+ count_of_ones int := 0;
+BEGIN
+ FOR i IN 1 .. array_length( nums, 1 ) LOOP
+ SELECT sum( v::int )
+ INTO count_of_ones
+ FROM regexp_split_to_table( i::bit( 8 )::text, '' ) v;
+
+ IF count_of_ones <> k THEN
+ continue;
+ END IF;
+
+ v_sum := v_sum + nums[ i ];
+ END LOOP;
+
+ RETURN v_sum;
+END
+$CODE$
+LANGUAGE plpgsql;