diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-10-27 14:06:56 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-10-27 14:06:56 +0100 |
| commit | 25db027e9aedfb5562c848c692c8b79200cb94e4 (patch) | |
| tree | b8ab5b39ed2fa23aed2aa4241de9483a22f951b4 | |
| parent | c37cbaffe8969079d1ed5c5fe0b0c94f8ef9f080 (diff) | |
| download | perlweeklychallenge-club-25db027e9aedfb5562c848c692c8b79200cb94e4.tar.gz perlweeklychallenge-club-25db027e9aedfb5562c848c692c8b79200cb94e4.tar.bz2 perlweeklychallenge-club-25db027e9aedfb5562c848c692c8b79200cb94e4.zip | |
- Added Python solution to "Fibonacci Sequence" task of week 136.
| -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() |
