Issues (956)

solutions/problem25.py (5 issues)

1
"""
2
Project Euler Problem 25: :math:`1000`-Digit Fibonacci Number
3
=============================================================
4
5
.. module:: solutions.problem25
6
   :synopsis: My solution to problem #25.
7
8
The source code for this problem can be
9
`found here <https://bitbucket.org/nekedome/project-euler/src/master/solutions/problem25.py>`_.
10
11
Problem Statement
12
#################
13
14
The Fibonacci sequence is defined by the recurrence relation:
15
16
.. math::
17
18
    F_n = F_{n-1} + F_{n-2}, \\mbox{ where } F_1 = 1 \\mbox{ and } F_2 = 1.
19
20
Hence the first :math:`12` terms will be:
21
22
.. math::
23
24
    F_1 &= 1 \\\\
25
    F_2 &= 1 \\\\
26
    F_3 &= 2 \\\\
27
    F_4 &= 3 \\\\
28
    F_5 &= 5 \\\\
29
    F_6 &= 8 \\\\
30
    F_7 &= 13 \\\\
31
    F_8 &= 21 \\\\
32
    F_9 &= 34 \\\\
33
    F_{10} &= 55 \\\\
34
    F_{11} &= 89 \\\\
35
    F_{12} &= 144
36
37
The :math:`12^{th}` term, :math:`F_{12}`, is the first term to contain three digits.
38
39
What is the index of the first term in the Fibonacci sequence to contain :math:`1000` digits?
40
41
Solution Discussion
42
###################
43
44
Simply iterate over the Fibonacci sequence until an :math:`F_n` is encountered containing :math:`1000` digits.
0 ignored issues
show
This line is too long as per the coding-style (110/100).

This check looks for lines that are too long. You can specify the maximum line length.

Loading history...
45
46
Solution Implementation
47
#######################
48
49
.. literalinclude:: ../../solutions/problem25.py
50
   :language: python
51
   :lines: 54-
52
"""
53
54
from itertools import dropwhile
55
56
from lib.digital import num_digits
57
from lib.sequence import Fibonaccis
58
59
60
def solve():
61
    """ Compute the answer to Project Euler's problem #25 """
62
    target = 1000
63
    fibs = Fibonaccis()
64
    for n, F_n in dropwhile(lambda elt: num_digits(elt[1]) < target, enumerate(fibs)):
0 ignored issues
show
Coding Style Naming introduced by
The name n does not conform to the variable naming conventions ((([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$).

This check looks for invalid names for a range of different identifiers.

You can set regular expressions to which the identifiers must conform if the defaults do not match your requirements.

If your project includes a Pylint configuration file, the settings contained in that file take precedence.

To find out more about Pylint, please refer to their site.

Loading history...
Coding Style Naming introduced by
The name F_n does not conform to the variable naming conventions ((([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$).

This check looks for invalid names for a range of different identifiers.

You can set regular expressions to which the identifiers must conform if the defaults do not match your requirements.

If your project includes a Pylint configuration file, the settings contained in that file take precedence.

To find out more about Pylint, please refer to their site.

Loading history...
The variable F_n seems to be unused.
Loading history...
65
        return n
66
67
68
expected_answer = 4782
0 ignored issues
show
Coding Style Naming introduced by
The name expected_answer does not conform to the constant naming conventions ((([A-Z_][A-Z0-9_]*)|(__.*__))$).

This check looks for invalid names for a range of different identifiers.

You can set regular expressions to which the identifiers must conform if the defaults do not match your requirements.

If your project includes a Pylint configuration file, the settings contained in that file take precedence.

To find out more about Pylint, please refer to their site.

Loading history...
69