aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Lynn <bizlsg@localhost.localdomain>2022-07-09 08:37:24 +0800
committerStephen Lynn <bizlsg@localhost.localdomain>2022-07-09 08:37:24 +0800
commitaf5f83db2cc0b58ddc6b97889f16a06c7daf6dbb (patch)
tree7556601199690dc9a1b26d3e010b0720ebfd346a
parent69d70a478d5b89e60bddab549734d3aecfdaf7ee (diff)
downloadperlweeklychallenge-club-af5f83db2cc0b58ddc6b97889f16a06c7daf6dbb.tar.gz
perlweeklychallenge-club-af5f83db2cc0b58ddc6b97889f16a06c7daf6dbb.tar.bz2
perlweeklychallenge-club-af5f83db2cc0b58ddc6b97889f16a06c7daf6dbb.zip
improved
-rwxr-xr-xchallenge-172/steve-g-lynn/julia/ch-1.jl20
-rwxr-xr-xchallenge-172/steve-g-lynn/perl/ch-1.pl11
-rwxr-xr-xchallenge-172/steve-g-lynn/raku/ch-1.p628
3 files changed, 37 insertions, 22 deletions
diff --git a/challenge-172/steve-g-lynn/julia/ch-1.jl b/challenge-172/steve-g-lynn/julia/ch-1.jl
index 0c4aba99b8..fa3f9bda66 100755
--- a/challenge-172/steve-g-lynn/julia/ch-1.jl
+++ b/challenge-172/steve-g-lynn/julia/ch-1.jl
@@ -3,16 +3,21 @@
using Primes
function prime_partition(m::Int, n::Int)::Matrix{Int}
- retval=Array{Int}(undef,0,n)
+
+ if (n > m/2)
+ return Array{Int}(undef,0,n)
+ end
+
+ retval=Array{Int}(undef,0,n)
if (n==2)
for i in primes(m ÷ 2)
if (isprime(m-i))
retval=[retval;i m-i]
end
+ if ( (m % 2) > 0) #for odd m: (m-i) is even for i > 2
+ break
+ end
end
- retval=sort_partition(retval)
- retval=delete_equal_rows(retval)
- return retval
end
if (n > 2)
for i in primes(m ÷ n)
@@ -22,10 +27,10 @@ function prime_partition(m::Int, n::Int)::Matrix{Int}
retval=[retval; (i .* ones(Int,sizep[1])) p]
end
end
- retval=sort_partition(retval)
- retval=delete_equal_rows(retval)
- return retval
end
+ retval=sort_partition(retval)
+ retval=delete_equal_rows(retval)
+ return retval
end
function sort_partition(p::Matrix{Int})::Matrix{Int}
@@ -47,4 +52,3 @@ println(prime_partition(18,2))
println(prime_partition(19,3))
println(prime_partition(20,4))
-
diff --git a/challenge-172/steve-g-lynn/perl/ch-1.pl b/challenge-172/steve-g-lynn/perl/ch-1.pl
index 3d81c9f72c..5d8bb723f6 100755
--- a/challenge-172/steve-g-lynn/perl/ch-1.pl
+++ b/challenge-172/steve-g-lynn/perl/ch-1.pl
@@ -15,21 +15,24 @@ print &prime_partition(20,4),"\n";
sub prime_partition {
my ($m, $n)=@_;
-
+
if ($m > $MAXPRIMES) {
$primes = $primes -> append(primes($MAXPRIMES, $m));
$MAXPRIMES = $m;
}
+ if ($n > $m/2) { return zeros($n,0); }
+
my $retval=zeros($n,0);
-
+
#-- $n == 2
if ($n==2) {
for my $prime ($primes -> list) {
if (is_prime($m - $prime)) {
- $retval = $retval->glue(1,
+ $retval = $retval->glue(1,
pdl([$m - $prime, $prime]));
}
+ last unless ($m % 2 ==0); #-- for odd m, m-i will be even for all i>2
last if ($prime > int($m / 2));
}
}
@@ -40,7 +43,7 @@ sub prime_partition {
my $p1 = &prime_partition($m - $prime, $n - 1);
if ( ($p1 -> dim(1)) > 0){
$p1=append($prime, $p1);
- $retval = $retval->glue(1,$p1);
+ $retval = $retval->glue(1,$p1);
}
last if ($prime > int($m / $n));
}
diff --git a/challenge-172/steve-g-lynn/raku/ch-1.p6 b/challenge-172/steve-g-lynn/raku/ch-1.p6
index 8e1ce34034..a81b15eb1d 100755
--- a/challenge-172/steve-g-lynn/raku/ch-1.p6
+++ b/challenge-172/steve-g-lynn/raku/ch-1.p6
@@ -10,21 +10,24 @@ say &prime-partition(18,2);
say &prime-partition(19,3);
say &prime-partition(20,4);
+say &distinct-prime-partition(19,3);
+
multi sub prime-partition (Int $m where $m > 0, Int $n where $n==2) {
($n > ($m div 2)) && (return ());
-
+
my @pp=();
-
+
if ($m > $MAXPRIMES) {
push @primes, $p.primes($MAXPRIMES,$m);
- $MAXPRIMES = $m;
- }
+ $MAXPRIMES = $m;
+ }
for (@primes) -> $prime {
if ( ($m - $prime).is-prime ) {
push @pp, BagHash.new($prime,$m-$prime);
}
- last if ($prime > ($m div 2));
+ last unless ($m %% 2); #for odd m, m-i always even for prime i > 2
+ last if ($prime > ($m div 2));
}
return @pp.unique(as => BagHash, with => &[eqv] );
}
@@ -33,13 +36,13 @@ multi sub prime-partition (Int $m where $m > 0, Int $n where $n==2) {
multi sub prime-partition (Int $m where $m > 0, Int $n where $n > 2) {
($n > ($m div 2)) && (return ());
-
+
my @pp=();
-
+
if ($m > $MAXPRIMES) {
push @primes, $p.primes($MAXPRIMES,$m);
- $MAXPRIMES = $m;
- }
+ $MAXPRIMES = $m;
+ }
for (@primes) -> $prime {
my @p1 = &prime-partition($m - $prime, $n - 1);
@@ -50,7 +53,12 @@ multi sub prime-partition (Int $m where $m > 0, Int $n where $n > 2) {
}
}
@pp.append(@p1);
- last if ($prime > ($m div 3));
+ last if ($prime > ($m div 3));
}
return @pp.unique(as => BagHash, with => &[eqv] );
}
+
+#--distinct prime partitions, as specified in challenge
+sub distinct-prime-partition (Int $m where $m > 0, Int $n where $n > 2) {
+ return ($p.primes($m-2)).combinations($n).grep(*.sum==$m);
+}