aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-172/james-smith/perl/ch-1.pl12
1 files changed, 11 insertions, 1 deletions
diff --git a/challenge-172/james-smith/perl/ch-1.pl b/challenge-172/james-smith/perl/ch-1.pl
index 9c6b5f5060..22443bb063 100644
--- a/challenge-172/james-smith/perl/ch-1.pl
+++ b/challenge-172/james-smith/perl/ch-1.pl
@@ -14,7 +14,7 @@ my @TESTS = (
);
my @t;
-say "*** @{$_}\n\n", _dump( partition(@{$_}) ), "\n" for @TESTS;
+say "*** @{$_}\n", _dump( first_partition(@{$_}) ), "\n--\n", _dump( partition(@{$_}) ), "\n" for @TESTS;
if(0){
say '===============================';
@@ -34,6 +34,16 @@ sub partition {
: $m > $p && is_prime $m ? [$m] : ();
}
+sub first_partition {
+ my ( $m, $n, $p ) = (@_,0);
+ $n > 1
+ ? map { $p = $_;
+ map { return [$p, @{$_}] }
+ first_partition( $m-$p, $n-1, $p )
+ } @{ primes $p+1, int( ($m-$n/2+1/2)/$n) }
+ : $m > $p && is_prime $m ? [$m] : ();
+}
+
sub _dump {
@_ ? join ', ', map { '[ '. join(', ', @{$_}).' ]' } @_ : '-- no solutions --';
}