From 25db027e9aedfb5562c848c692c8b79200cb94e4 Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Wed, 27 Oct 2021 14:06:56 +0100 Subject: - Added Python solution to "Fibonacci Sequence" task of week 136. --- challenge-136/mohammad-anwar/python/ch-2.py | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 challenge-136/mohammad-anwar/python/ch-2.py 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() -- cgit