aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-076/mohammad-anwar/perl/ch-1.pl23
-rwxr-xr-xchallenge-076/mohammad-anwar/perl/ch-1.t24
2 files changed, 23 insertions, 24 deletions
diff --git a/challenge-076/mohammad-anwar/perl/ch-1.pl b/challenge-076/mohammad-anwar/perl/ch-1.pl
index ac66f3fd48..a2152c3528 100755
--- a/challenge-076/mohammad-anwar/perl/ch-1.pl
+++ b/challenge-076/mohammad-anwar/perl/ch-1.pl
@@ -15,35 +15,34 @@ use Algorithm::Combinatorics qw(combinations);
my $SUM = $ARGV[0];
print "USAGE: perl $0 <positive_number>\n" and exit unless defined $SUM;
-print prime_sum(find_prime_upto($SUM), $SUM);
+_print(prime_sum(find_prime_upto($SUM), $SUM));
#
#
# METHODS
+sub _print {
+ my ($prime_sum) = @_;
+
+ foreach (@$prime_sum) {
+ print sprintf("%s\n", join ", ", @$_);
+ }
+}
+
sub prime_sum {
my ($primes, $sum) = @_;
- print sprintf("Primes: %s\n", join(", ", @$primes));
my $prime_sum = [];
foreach my $i (1 .. $sum) {
last if ($i > @$primes);
foreach my $comb (combinations($primes, $i)) {
my $_sum = 0;
$_sum += $_ for @$comb;
- if ($_sum == $sum) {
- if ((@$prime_sum == 0) || (@$prime_sum > @$comb)) {
- $prime_sum = $comb;
- }
- }
-
- if (@$prime_sum) {
- return sprintf("Prime Sum: %s\n", join ", ", @$prime_sum);
- }
+ push @$prime_sum, $comb if ($_sum == $sum);
}
}
- return "None found.\n";
+ return $prime_sum;
}
sub find_prime_upto {
diff --git a/challenge-076/mohammad-anwar/perl/ch-1.t b/challenge-076/mohammad-anwar/perl/ch-1.t
index bd749b9f80..d1247b0001 100755
--- a/challenge-076/mohammad-anwar/perl/ch-1.t
+++ b/challenge-076/mohammad-anwar/perl/ch-1.t
@@ -11,10 +11,18 @@
use strict;
use warnings;
use Test::More;
+use Test::Deep;
use Algorithm::Combinatorics qw(combinations);
-is(prime_sum(find_prime_upto(9), 9), "2, 7", "testing prime sum = 9");
-is(prime_sum(find_prime_upto(12), 12), "5, 7", "testing prime sum = 12");
+is_deeply(prime_sum(find_prime_upto(6), 6),
+ [],
+ "testing prime sum = 6");
+is_deeply(prime_sum(find_prime_upto(9), 9),
+ [[2, 7]],
+ "testing prime sum = 9");
+is_deeply(prime_sum(find_prime_upto(12), 12),
+ [[5, 7], [2, 3, 7]],
+ "testing prime sum = 12");
done_testing;
@@ -31,19 +39,11 @@ sub prime_sum {
foreach my $comb (combinations($primes, $i)) {
my $_sum = 0;
$_sum += $_ for @$comb;
- if ($_sum == $sum) {
- if ((@$prime_sum == 0) || (@$prime_sum > @$comb)) {
- $prime_sum = $comb;
- }
- }
-
- if (@$prime_sum) {
- return join ", ", @$prime_sum;
- }
+ push @$prime_sum, $comb if ($_sum == $sum);
}
}
- return 0;
+ return $prime_sum;
}
sub find_prime_upto {