aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-12-21 15:59:40 +0000
committerGitHub <noreply@github.com>2021-12-21 15:59:40 +0000
commit9b3d7a11e563e32c66262e90014e8f2747022b55 (patch)
tree995c0a9bf39f9b53dbae6699f0adf56eda5b6bc7
parent0749fdf8d822e65657c7002a148a6dceb2741143 (diff)
parent236b5d9862f583749e7d27f0272e1dd6230d1c51 (diff)
downloadperlweeklychallenge-club-9b3d7a11e563e32c66262e90014e8f2747022b55.tar.gz
perlweeklychallenge-club-9b3d7a11e563e32c66262e90014e8f2747022b55.tar.bz2
perlweeklychallenge-club-9b3d7a11e563e32c66262e90014e8f2747022b55.zip
Merge pull request #5396 from fluca1978/PWC144
Pwc144
-rw-r--r--challenge-144/luca-ferrari/blog-1.txt1
-rw-r--r--challenge-144/luca-ferrari/blog-2.txt1
-rw-r--r--challenge-144/luca-ferrari/blog-3.txt1
-rw-r--r--challenge-144/luca-ferrari/blog-4.txt1
-rw-r--r--challenge-144/luca-ferrari/postgresql/ch-1.sql71
-rw-r--r--challenge-144/luca-ferrari/postgresql/ch-2.sql52
-rwxr-xr-xchallenge-144/luca-ferrari/raku/ch-1.p621
-rwxr-xr-xchallenge-144/luca-ferrari/raku/ch-2.p640
8 files changed, 188 insertions, 0 deletions
diff --git a/challenge-144/luca-ferrari/blog-1.txt b/challenge-144/luca-ferrari/blog-1.txt
new file mode 100644
index 0000000000..439af3081a
--- /dev/null
+++ b/challenge-144/luca-ferrari/blog-1.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2021/12/20/PerlWeeklyChallenge144.html#task1
diff --git a/challenge-144/luca-ferrari/blog-2.txt b/challenge-144/luca-ferrari/blog-2.txt
new file mode 100644
index 0000000000..80ac3eb036
--- /dev/null
+++ b/challenge-144/luca-ferrari/blog-2.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2021/12/20/PerlWeeklyChallenge144.html#task2
diff --git a/challenge-144/luca-ferrari/blog-3.txt b/challenge-144/luca-ferrari/blog-3.txt
new file mode 100644
index 0000000000..409920a331
--- /dev/null
+++ b/challenge-144/luca-ferrari/blog-3.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2021/12/20/PerlWeeklyChallenge144.html#task1pg
diff --git a/challenge-144/luca-ferrari/blog-4.txt b/challenge-144/luca-ferrari/blog-4.txt
new file mode 100644
index 0000000000..409920a331
--- /dev/null
+++ b/challenge-144/luca-ferrari/blog-4.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2021/12/20/PerlWeeklyChallenge144.html#task1pg
diff --git a/challenge-144/luca-ferrari/postgresql/ch-1.sql b/challenge-144/luca-ferrari/postgresql/ch-1.sql
new file mode 100644
index 0000000000..c8d7264e7c
--- /dev/null
+++ b/challenge-144/luca-ferrari/postgresql/ch-1.sql
@@ -0,0 +1,71 @@
+/*
+ * Check if the current number is prime
+ */
+CREATE OR REPLACE FUNCTION f_is_prime( n int )
+RETURNS bool
+AS $CODE$
+DECLARE
+ divisor int;
+BEGIN
+ FOR divisor IN 2 .. ( n - 1 ) LOOP
+ IF mod( n, divisor ) = 0 THEN
+ RETURN false;
+ END IF;
+ END LOOP;
+
+ RETURN TRUE;
+END
+$CODE$
+LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION f_semiprime_factors( n int )
+RETURNS SETOF int
+AS $CODE$
+DECLARE
+ current_number int;
+BEGIN
+ FOR current_number IN 1 .. n LOOP
+ IF f_is_prime( current_number ) AND mod( n, current_number ) = 0 AND f_is_prime( ( n / current_number ) ) THEN
+ RETURN NEXT current_number;
+ END IF;
+ END LOOP;
+
+ RETURN;
+END
+$CODE$
+LANGUAGE plpgsql;
+
+
+
+CREATE OR REPLACE FUNCTION f_is_semiprime( n int )
+RETURNS bool
+AS $CODE$
+ SELECT CASE count( * )
+ WHEN 0 THEN false
+ ELSE true
+ END
+ FROM f_semiprime_factors( n ) s;
+$CODE$
+LANGUAGE sql;
+
+
+
+CREATE OR REPLACE FUNCTION f_find_semiprimes( lim int default 100 )
+RETURNS SETOF int
+AS $CODE$
+DECLARE
+ n int;
+BEGIN
+ n := 1;
+
+ WHILE n < lim LOOP
+ IF f_is_semiprime( n ) THEN
+ RETURN NEXT n;
+ END IF;
+ n := n + 1;
+ END LOOP;
+
+ RETURN;
+END
+$CODE$
+LANGUAGE plpgsql;
diff --git a/challenge-144/luca-ferrari/postgresql/ch-2.sql b/challenge-144/luca-ferrari/postgresql/ch-2.sql
new file mode 100644
index 0000000000..0fa2b07521
--- /dev/null
+++ b/challenge-144/luca-ferrari/postgresql/ch-2.sql
@@ -0,0 +1,52 @@
+CREATE OR REPLACE FUNCTION f_ulam_do_sum( ulam int[] )
+RETURNS SETOF int
+AS $CODE$
+DECLARE
+ left_index int;
+ right_index int;
+BEGIN
+
+ FOR left_index IN 1 .. array_length( ulam, 1 ) LOOP
+ FOR right_index IN left_index + 1 .. array_length( ulam, 1 ) LOOP
+ RETURN NEXT ulam[ left_index ] + ulam[ right_index ];
+ END LOOP;
+ END LOOP;
+
+ RETURN;
+END
+$CODE$
+LANGUAGE plpgsql;
+
+
+CREATE OR REPLACE FUNCTION f_ulam( u int, v int, lim int default 10 )
+RETURNS int[]
+AS $CODE$
+DECLARE
+ ulam int[];
+ next_value int;
+BEGIN
+-- PERFORM array_append( ulam, u );
+-- PERFORM array_append( ulam, v );
+-- PERFORM array_append( ulam, u + v );
+
+
+ ulam := ulam || u || v || u + v;
+
+ WHILE array_length( ulam, 1 ) < lim LOOP
+
+ SELECT vv
+ INTO next_value
+ FROM f_ulam_do_sum( ulam ) AS sums( vv )
+ WHERE vv > ulam[ array_length( ulam, 1 ) ]
+ GROUP BY 1
+ HAVING COUNT( * ) = 1
+ ORDER BY vv
+ LIMIT 1;
+
+ ulam := ulam || next_value;
+ END LOOP;
+
+ RETURN ulam;
+END
+$CODE$
+LANGUAGE plpgsql;
diff --git a/challenge-144/luca-ferrari/raku/ch-1.p6 b/challenge-144/luca-ferrari/raku/ch-1.p6
new file mode 100755
index 0000000000..70462d1747
--- /dev/null
+++ b/challenge-144/luca-ferrari/raku/ch-1.p6
@@ -0,0 +1,21 @@
+#!raku
+
+sub MAIN( Int $limit where { $limit > 1 } = 100 ) {
+ my @semi-primes;
+
+ for 1 .. $limit -> $current-number {
+ @semi-primes.push: $current-number if ( 1 .. $current-number ).grep( { $_.is-prime
+ && $current-number %% $_
+ && ( $current-number / $_ ).Int.is-prime } )
+ .elems > 0;
+ # for 1 .. $current-number -> $current-divisor {
+ # next if ! $current-divisor.is-prime;
+ # next if $current-number !%% $current-divisor;
+ # next if ! ( $current-number / $current-divisor ).Int.is-prime;
+ # @semi-primes.push: $current-number;
+ # last;
+ # }
+ }
+
+ @semi-primes.join( ',' ).say;
+}
diff --git a/challenge-144/luca-ferrari/raku/ch-2.p6 b/challenge-144/luca-ferrari/raku/ch-2.p6
new file mode 100755
index 0000000000..68ed1b9ebe
--- /dev/null
+++ b/challenge-144/luca-ferrari/raku/ch-2.p6
@@ -0,0 +1,40 @@
+#!raku
+
+# Sums all the couple of numbers
+# in only direction, skipping the duplicated
+# values
+sub do-sum( @array ) {
+ my %sums;
+
+ for 0 .. @array.end -> $index-left {
+ for $index-left ^.. @array.end -> $index-right {
+ next if $index-left == $index-right;
+
+ %sums{ @array[ $index-left ] + @array[ $index-right ] }++;
+ }
+ }
+
+
+ my @found;
+ @found.push: $_.Int if %sums{ $_ } == 1 for %sums.keys;
+ @found;
+
+}
+
+
+sub MAIN( Int $u where { $u > 0 },
+ Int $v where { $v > 0 },
+ Int $limit = 10 ) {
+
+
+
+ my @ulam = $u, $v, $u + $v;
+
+ while @ulam.elems < $limit {
+ @ulam.push: do-sum( @ulam ).grep( { $_ > @ulam[ * - 1 ] } ).min;
+ }
+
+
+ @ulam.join( ',' ).say;
+
+}