aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-156/luca-ferrari/blog-1.txt1
-rw-r--r--challenge-156/luca-ferrari/blog-2.txt1
-rw-r--r--challenge-156/luca-ferrari/blog-3.txt1
-rw-r--r--challenge-156/luca-ferrari/blog-4.txt1
-rw-r--r--challenge-156/luca-ferrari/postgresql/ch-1.sql35
-rw-r--r--challenge-156/luca-ferrari/postgresql/ch-2.sql48
-rw-r--r--challenge-156/luca-ferrari/raku/ch-1.p611
-rw-r--r--challenge-156/luca-ferrari/raku/ch-2.p68
8 files changed, 106 insertions, 0 deletions
diff --git a/challenge-156/luca-ferrari/blog-1.txt b/challenge-156/luca-ferrari/blog-1.txt
new file mode 100644
index 0000000000..768974fdff
--- /dev/null
+++ b/challenge-156/luca-ferrari/blog-1.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/03/17/PerlWeeklyChallenge156.html#task1
diff --git a/challenge-156/luca-ferrari/blog-2.txt b/challenge-156/luca-ferrari/blog-2.txt
new file mode 100644
index 0000000000..ec53607e53
--- /dev/null
+++ b/challenge-156/luca-ferrari/blog-2.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/03/17/PerlWeeklyChallenge156.html#task2
diff --git a/challenge-156/luca-ferrari/blog-3.txt b/challenge-156/luca-ferrari/blog-3.txt
new file mode 100644
index 0000000000..660a9db396
--- /dev/null
+++ b/challenge-156/luca-ferrari/blog-3.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/03/18/PerlWeeklyChallenge156.html#task1plperl
diff --git a/challenge-156/luca-ferrari/blog-4.txt b/challenge-156/luca-ferrari/blog-4.txt
new file mode 100644
index 0000000000..2357b1a51b
--- /dev/null
+++ b/challenge-156/luca-ferrari/blog-4.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/03/18/PerlWeeklyChallenge156.html#task2plperl
diff --git a/challenge-156/luca-ferrari/postgresql/ch-1.sql b/challenge-156/luca-ferrari/postgresql/ch-1.sql
new file mode 100644
index 0000000000..70a4513be3
--- /dev/null
+++ b/challenge-156/luca-ferrari/postgresql/ch-1.sql
@@ -0,0 +1,35 @@
+CREATE SCHEMA IF NOT EXISTS pwc156;
+
+CREATE OR REPLACE FUNCTION
+pwc156.is_prime( int )
+RETURNS bool
+AS $CODE$
+ return 0 if $_[0] <= 1;
+ for my $i ( 2 .. $_[0] - 1 ) {
+ return 0 if $_[0] % $i == 0;
+ }
+
+ return 1;
+$CODE$
+LANGUAGE plperl;
+
+
+CREATE OR REPLACE FUNCTION
+pwc156.sumbits( int[] )
+RETURNS int
+AS $CODE$
+ my $sum = 0;
+ for my $bit ( @{$_[0]} ) {
+ $sum += $bit;
+ }
+
+ return $sum;
+$CODE$
+LANGUAGE plperl;
+
+
+
+SELECT n
+FROM generate_series( 1, 1000 ) n
+WHERE pwc156.is_prime( pwc156.sumbits( regexp_split_to_array( n::bit(10)::text, '' )::int[] ) )
+LIMIT 10;
diff --git a/challenge-156/luca-ferrari/postgresql/ch-2.sql b/challenge-156/luca-ferrari/postgresql/ch-2.sql
new file mode 100644
index 0000000000..ac9d22739c
--- /dev/null
+++ b/challenge-156/luca-ferrari/postgresql/ch-2.sql
@@ -0,0 +1,48 @@
+CREATE SCHEMA IF NOT EXISTS pwc156;
+
+CREATE OR REPLACE FUNCTION
+pwc156.weird( int )
+RETURNS bool
+AS $CODE$
+
+use Algorithm::Knapsack;
+my @divisors;
+
+for my $i ( 2 .. $_[0] - 1 ) {
+ push @divisors, $i if $_[0] % $i == 0;
+}
+
+my $sum = 0;
+for my $i ( @divisors ) {
+ $sum += $i;
+}
+
+
+return 0 if $sum <= $_[0];
+
+my $knapsack = Algorithm::Knapsack->new(
+ capacity => $_[0],
+ weights => \@divisors,
+);
+
+$knapsack->compute();
+
+foreach my $solution ($knapsack->solutions()) {
+ my @founds = @divisors[ $solution->@* ];
+ my $sum = 0;
+ $sum += $_ for ( @founds );
+ return 0 if $sum == $_[0];
+
+}
+
+
+return 1;
+$CODE$
+LANGUAGE plperlu;
+
+
+
+
+SELECT n
+FROM generate_series( 1, 100 ) n
+WHERE pwc156.weird( n );
diff --git a/challenge-156/luca-ferrari/raku/ch-1.p6 b/challenge-156/luca-ferrari/raku/ch-1.p6
new file mode 100644
index 0000000000..3b3bcc727a
--- /dev/null
+++ b/challenge-156/luca-ferrari/raku/ch-1.p6
@@ -0,0 +1,11 @@
+#!raku
+
+sub MAIN( Int $limit where { $limit > 0 } = 10 ) {
+ my @pernicious = lazy gather {
+ for 1 .. Inf {
+ take $_ if $_.base( 2 ).comb.sum.is-prime;
+ }
+ };
+
+ @pernicious[ 0 .. $limit - 1 ].join( ', ' ).say;
+}
diff --git a/challenge-156/luca-ferrari/raku/ch-2.p6 b/challenge-156/luca-ferrari/raku/ch-2.p6
new file mode 100644
index 0000000000..9788f65fbe
--- /dev/null
+++ b/challenge-156/luca-ferrari/raku/ch-2.p6
@@ -0,0 +1,8 @@
+#!raku
+
+sub MAIN( Int $n where { $n > 0 } ) {
+ my @divisors = ( 1 .. $n - 1 ).grep( $n %% * );
+ '0'.say and exit if @divisors.sum <= $n
+ || @divisors.combinations.map( *.sum ).grep( * == $n ).elems > 0;
+ '1'.say;
+}