diff options
| -rw-r--r-- | challenge-136/mohammad-anwar/python/ch-2.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/challenge-136/mohammad-anwar/python/ch-2.py b/challenge-136/mohammad-anwar/python/ch-2.py new file mode 100644 index 0000000000..046d88ed53 --- /dev/null +++ b/challenge-136/mohammad-anwar/python/ch-2.py @@ -0,0 +1,63 @@ +#!/usr/bin/python3 + +''' + +Week 136: + + https://theweeklychallenge.org/blog/perl-weekly-challenge-136 + +Task #2: Fibonacci Sequence + + You are given a positive number $n. + + Write a script to find how many different sequences you can create using Fibonacci numbers where the sum of unique numbers in each sequence are the same as the given number. + +''' + +import sys +import unittest +from itertools import combinations + +# +# +# This is translated from my Perl solution for the same task: +# +# https://github.com/manwar/perlweeklychallenge-club/blob/master/challenge-136/mohammad-anwar/perl/ch-2.pl + +def fibonacci_series_upto(_sum): + fibonacci_series = [1, 2] + while fibonacci_series[-1] + fibonacci_series[-2] <= _sum: + fibonacci_series.append(fibonacci_series[-1] + fibonacci_series[-2]) + + return fibonacci_series + +def fibonacci_sequence(_sum): + fibonacci_series = fibonacci_series_upto(_sum) + fibonacci_sum = [] + + for i in range(1, _sum): + if i > len(fibonacci_series): + break + + for comb in combinations(fibonacci_series, i): + if sum(comb) == _sum: + fibonacci_sum.append(comb) + + return len(fibonacci_sum) + +# +# +# Unit test class + +class TestFibonacciSequence(unittest.TestCase): + + def test_example_1(self): + self.assertEqual(fibonacci_sequence(16), 4, 'Example 1') + + def test_example_2(self): + self.assertEqual(fibonacci_sequence(9), 2, 'Example 2') + + def test_example_3(self): + self.assertEqual(fibonacci_sequence(15), 2, 'Example 3') + +unittest.main() |
