diff options
| author | Dave Jacoby <jacoby.david@gmail.com> | 2022-11-20 14:22:01 -0500 |
|---|---|---|
| committer | Dave Jacoby <jacoby.david@gmail.com> | 2022-11-20 14:22:01 -0500 |
| commit | dd682dfee966fe63cbfbbbf6a9cb903b1d831416 (patch) | |
| tree | a71619e10c8dcd29fc13a08beb1325f4a7bc5a84 /challenge-191/luca-ferrari/postgresql/ch-2.sql | |
| parent | d6d01468fd7a5647b9ba96ebf7a0157ff79f3352 (diff) | |
| parent | bde0adaf7b8dfe99c4e494c932d8702eb8cf9a56 (diff) | |
| download | perlweeklychallenge-club-dd682dfee966fe63cbfbbbf6a9cb903b1d831416.tar.gz perlweeklychallenge-club-dd682dfee966fe63cbfbbbf6a9cb903b1d831416.tar.bz2 perlweeklychallenge-club-dd682dfee966fe63cbfbbbf6a9cb903b1d831416.zip | |
Merge branch 'master' of https://github.com/manwar/perlweeklychallenge-club
Diffstat (limited to 'challenge-191/luca-ferrari/postgresql/ch-2.sql')
| -rw-r--r-- | challenge-191/luca-ferrari/postgresql/ch-2.sql | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/challenge-191/luca-ferrari/postgresql/ch-2.sql b/challenge-191/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..7b4755b34c --- /dev/null +++ b/challenge-191/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1,71 @@ +-- Perl Weekly Challenge 191 +-- Task 2 + +CREATE SCHEMA IF NOT EXISTS pwc191; + +CREATE OR REPLACE FUNCTION +pwc191.task2_plpgsql( n int ) +RETURNS int +AS $CODE$ +DECLARE + cute_counter int := 0; + i int; + src int[]; + permutation int[]; + is_cute bool; +BEGIN + + FOR i IN 1 .. n LOOP + src = src || i; + END LOOP; + + + + FOR permutation IN + with recursive + data as (select src as arr), + keys as (select generate_subscripts(d.arr, 1) as rn from data d), + cte as ( + select d.arr initial_arr, array[d.arr[k.rn]] new_arr, array[k.rn] used_rn + from data d + cross join keys k + union all + select initial_arr, c.new_arr || c.initial_arr[k.rn], used_rn || k.rn + from cte c + inner join keys k on not (k.rn = any(c.used_rn)) + ) + select new_arr + from cte + WHERE array_length( new_arr, 1 ) = n + LOOP + + is_cute := 1; + FOR i IN 1 .. array_length( permutation, 1 ) LOOP + IF permutation[i] % i <> 0 THEN + is_cute = false; + EXIT; + END IF; + END LOOP; + + IF is_cute THEN + cute_counter := cute_counter + 1; + END IF; + + is_cute := 1; + FOR i IN 1 .. array_length( permutation, 1 ) LOOP + IF i % permutation[i] <> 0 THEN + is_cute = false; + EXIT; + END IF; + END LOOP; + IF is_cute THEN + cute_counter := cute_counter + 1; + END IF; + + END LOOP; + + +RETURN cute_counter; +END +$CODE$ +LANGUAGE plpgsql; |
