blob: 046d88ed535d0018b9d41d7c81b9ef050cdf3330 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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()
|