From 3bbb49913ae8c0c5ed4a863f77507cc3c4f4f372 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Thu, 17 Mar 2022 10:56:10 +0100 Subject: Task 1 done --- challenge-156/luca-ferrari/raku/ch-1.p6 | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 challenge-156/luca-ferrari/raku/ch-1.p6 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; +} -- cgit From a82c4ec967f1060377070b4cde901bef0d2e1d18 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Thu, 17 Mar 2022 11:11:18 +0100 Subject: Task 2 done --- challenge-156/luca-ferrari/raku/ch-2.p6 | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 challenge-156/luca-ferrari/raku/ch-2.p6 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; +} -- cgit From 7ea0f8c6a3a7eb5081143d153254b309cee19961 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Thu, 17 Mar 2022 12:16:00 +0100 Subject: Task 1 and 2 done in Pl/Perl --- challenge-156/luca-ferrari/postgresql/ch-1.sql | 35 +++++++++++++++++++ challenge-156/luca-ferrari/postgresql/ch-2.sql | 48 ++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 challenge-156/luca-ferrari/postgresql/ch-1.sql create mode 100644 challenge-156/luca-ferrari/postgresql/ch-2.sql 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 ); -- cgit From 6c15d7006aaf95f65d1701f287403b7d03fc6e40 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Thu, 17 Mar 2022 17:26:44 +0100 Subject: Blog references --- challenge-156/luca-ferrari/blog-1.txt | 1 + challenge-156/luca-ferrari/blog-2.txt | 1 + challenge-156/luca-ferrari/blog-3.txt | 1 + challenge-156/luca-ferrari/blog-4.txt | 1 + 4 files changed, 4 insertions(+) create mode 100644 challenge-156/luca-ferrari/blog-1.txt create mode 100644 challenge-156/luca-ferrari/blog-2.txt create mode 100644 challenge-156/luca-ferrari/blog-3.txt create mode 100644 challenge-156/luca-ferrari/blog-4.txt 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 -- cgit