aboutsummaryrefslogtreecommitdiff
path: root/challenge-077/dave-jacoby
diff options
context:
space:
mode:
authorDave Jacoby <jacoby.david@gmail.com>2020-09-07 16:39:02 -0400
committerDave Jacoby <jacoby.david@gmail.com>2020-09-07 16:39:02 -0400
commit31ed17bdfd83e3981777fdee9deb897f07d226d3 (patch)
treedbdc9c170361223387c9b1d00d214d5d2e9d16c4 /challenge-077/dave-jacoby
parente3aba67107fab58b65fa2685009cc4e17b829e7c (diff)
downloadperlweeklychallenge-club-31ed17bdfd83e3981777fdee9deb897f07d226d3.tar.gz
perlweeklychallenge-club-31ed17bdfd83e3981777fdee9deb897f07d226d3.tar.bz2
perlweeklychallenge-club-31ed17bdfd83e3981777fdee9deb897f07d226d3.zip
challenge changed to get *ALL*, not just *ONE*
Diffstat (limited to 'challenge-077/dave-jacoby')
-rwxr-xr-xchallenge-077/dave-jacoby/perl/ch-1.pl27
1 files changed, 16 insertions, 11 deletions
diff --git a/challenge-077/dave-jacoby/perl/ch-1.pl b/challenge-077/dave-jacoby/perl/ch-1.pl
index 01ced86bbc..6dc2865d99 100755
--- a/challenge-077/dave-jacoby/perl/ch-1.pl
+++ b/challenge-077/dave-jacoby/perl/ch-1.pl
@@ -13,31 +13,36 @@ my $n = 9;
GetOptions( 'n=i' => \$n );
croak "n < 1" if $n < 1;
-my $x = fib_sum($n);
-my $s = scalar $x->@*;
-my $p = join ' + ', $x->@*;
-say qq{$s as ($n = $p)};
+fib_sum($n);
-#
+#
sub fib_sum ( $n ) {
my @fib = reverse fib_list($n);
my @list = ( [] );
+ my @sums;
my %no;
while (@list) {
my $entry = shift @list;
- my $join = join ',', $entry->@*;
- next if $no{$join}++;
-
for my $fib (@fib) {
next if grep { $_ == $fib } $entry->@*;
- my $new->@* = sort { $a <=> $b } $fib, $entry->@*;
+ my $new->@* = sort { $b <=> $a } $fib, $entry->@*;
my $sum = sum0 $new->@*;
+ my $join = join ',', $new->@*;
+ next if $no{$join}++;
push @list, $new if $sum < $n;
- return $new if $sum == $n;
+ push @sums, $new if $sum == $n;
+ }
+ }
+
+ if ( scalar @sums ) {
+ for my $sum (@sums) {
+ my $s = scalar $sum->@*;
+ my $p = join ' + ', $sum->@*;
+ say qq{$s as ($n = $p)};
}
}
- print 0 && exit;
+ else { print 0 }
}
# creates a list of fibonacci values where each value is