diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-08 03:22:10 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-08 03:22:10 +0100 |
| commit | 41baccbf1440fcd9cd88abc370bec2cb462ae278 (patch) | |
| tree | eced56fadfc8cadb53d29476dc08dfc4a6767e68 /challenge-077 | |
| parent | 1fa8221462a52d748a8ec44461e4e8a5ba0ef431 (diff) | |
| download | perlweeklychallenge-club-41baccbf1440fcd9cd88abc370bec2cb462ae278.tar.gz perlweeklychallenge-club-41baccbf1440fcd9cd88abc370bec2cb462ae278.tar.bz2 perlweeklychallenge-club-41baccbf1440fcd9cd88abc370bec2cb462ae278.zip | |
- Raku solution to "Fibonacci Sum" task of week #077.
Diffstat (limited to 'challenge-077')
| -rw-r--r-- | challenge-077/mohammad-anwar/raku/ch-1.raku | 44 | ||||
| -rw-r--r-- | challenge-077/mohammad-anwar/raku/ch-1.t | 45 |
2 files changed, 89 insertions, 0 deletions
diff --git a/challenge-077/mohammad-anwar/raku/ch-1.raku b/challenge-077/mohammad-anwar/raku/ch-1.raku new file mode 100644 index 0000000000..b2e6783c94 --- /dev/null +++ b/challenge-077/mohammad-anwar/raku/ch-1.raku @@ -0,0 +1,44 @@ +#!/usr/bin/env raku + +# +# Perl Weekly Challenge - 077 +# +# Task #1: Fibonacci Sum +# +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-077 +# + +use v6.d; + +sub MAIN(Int :$N where $N > 0) { + fibonacci-sum($N).join("\n").say; +} + +# +# +# METHODS + +sub fibonacci-sum(Int $sum where $sum > 0) { + + my @fibonacci = fibonacci-series-upto($sum); + my @fibonacci_sum = Empty; + for 1 .. $sum -> $i { + last if $i > @fibonacci.elems; + for @fibonacci.combinations: $i -> $comb { + my $_sum = [+] $comb; + @fibonacci_sum.push: $comb if $_sum == $sum; + } + } + + return |@fibonacci_sum; +} + +sub fibonacci-series-upto(Int $num where $num > 0) { + + my @fibonacci = (1, 2); + while @fibonacci.[*-1] + @fibonacci.[*-2] <= $num { + @fibonacci.push: @fibonacci.[*-1] + @fibonacci.[*-2]; + } + + return @fibonacci; +} diff --git a/challenge-077/mohammad-anwar/raku/ch-1.t b/challenge-077/mohammad-anwar/raku/ch-1.t new file mode 100644 index 0000000000..2bf6f7d292 --- /dev/null +++ b/challenge-077/mohammad-anwar/raku/ch-1.t @@ -0,0 +1,45 @@ +#!/usr/bin/env raku + +# +# Perl Weekly Challenge - 077 +# +# Task #1: Fibonacci Sum +# +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-077 +# + +use Test; + +is-deeply fibonacci-sum(6), ((1,5), (1,2,3)), "fibonacci sum = 6"; +is-deeply fibonacci-sum(9), ((1,8), (1,3,5)), "fibonacci sum = 9"; + +done-testing; + +# +# +# METHODS + +sub fibonacci-sum(Int $sum where $sum > 0) { + + my @fibonacci = fibonacci-series-upto($sum); + my @fibonacci_sum = Empty; + for 1 .. $sum -> $i { + last if $i > @fibonacci.elems; + for @fibonacci.combinations: $i -> $comb { + my $_sum = [+] $comb; + @fibonacci_sum.push: $comb if $_sum == $sum; + } + } + + return |@fibonacci_sum; +} + +sub fibonacci-series-upto(Int $num where $num > 0) { + + my @fibonacci = (1, 2); + while @fibonacci.[*-1] + @fibonacci.[*-2] <= $num { + @fibonacci.push: @fibonacci.[*-1] + @fibonacci.[*-2]; + } + + return @fibonacci; +} |
