aboutsummaryrefslogtreecommitdiff
path: root/challenge-077
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-077')
-rw-r--r--challenge-077/mohammad-anwar/raku/ch-1.raku44
-rw-r--r--challenge-077/mohammad-anwar/raku/ch-1.t45
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;
+}