diff options
| -rw-r--r-- | challenge-172/james-smith/perl/ch-1.pl | 12 |
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 --'; } |
