diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-07-09 04:01:03 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-09 04:01:03 +0100 |
| commit | 691f04963d707495eae490ff7758740af5aa6d70 (patch) | |
| tree | c14e2a918feaa98c67a77d0287d9fbb47db89e40 | |
| parent | 725cba5ef20825dfcdd6599aca22681827757445 (diff) | |
| parent | af5f83db2cc0b58ddc6b97889f16a06c7daf6dbb (diff) | |
| download | perlweeklychallenge-club-691f04963d707495eae490ff7758740af5aa6d70.tar.gz perlweeklychallenge-club-691f04963d707495eae490ff7758740af5aa6d70.tar.bz2 perlweeklychallenge-club-691f04963d707495eae490ff7758740af5aa6d70.zip | |
Merge pull request #6406 from steve-g-lynn/branch-for-challenge-172
improved
| -rwxr-xr-x | challenge-172/steve-g-lynn/julia/ch-1.jl | 20 | ||||
| -rwxr-xr-x | challenge-172/steve-g-lynn/perl/ch-1.pl | 11 | ||||
| -rwxr-xr-x | challenge-172/steve-g-lynn/raku/ch-1.p6 | 28 |
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); +} |
