Python/project_euler
pre-commit-ci[bot] fc33c50593
[pre-commit.ci] pre-commit autoupdate (#12398)
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.4.10 → v0.5.0](https://github.com/astral-sh/ruff-pre-commit/compare/v0.4.10...v0.5.0)
- [github.com/pre-commit/mirrors-mypy: v1.10.0 → v1.10.1](https://github.com/pre-commit/mirrors-mypy/compare/v1.10.0...v1.10.1)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-11-25 21:46:20 +01:00
..
problem_001 Misc fixes across multiple algorithms (#6912) 2022-10-16 10:55:38 +05:30
problem_002 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_003 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_004 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_005 Removed redundant greatest_common_divisor code (#9358) 2023-10-09 14:19:12 +02:00
problem_006 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_007 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_008 Fix ruff (#11527) 2024-08-25 17:33:11 +02:00
problem_009 Fix ruff (#11527) 2024-08-25 17:33:11 +02:00
problem_010 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_011 Fix ruff (#11527) 2024-08-25 17:33:11 +02:00
problem_012 Add pep8-naming to pre-commit hooks and fixes incorrect naming conventions (#7062) 2022-10-13 00:54:20 +02:00
problem_013 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_014 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_015 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_016 The black formatter is no longer beta (#5960) 2022-01-30 20:29:54 +01:00
problem_017 Rename Project Euler directories and other dependent changes (#3300) 2020-10-15 12:43:28 +05:30
problem_018 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_019 Enable ruff PLR5501 rule (#11332) 2024-03-28 18:25:41 +01:00
problem_020 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_021 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_022 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_023 Add pep8-naming to pre-commit hooks and fixes incorrect naming conventions (#7062) 2022-10-13 00:54:20 +02:00
problem_024 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_025 [pre-commit.ci] pre-commit autoupdate (#12398) 2024-11-25 21:46:20 +01:00
problem_026 Add flake8 pluin flake8 bugbear to pre-commit (#7132) 2022-10-13 18:03:06 +02:00
problem_027 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_028 The black formatter is no longer beta (#5960) 2022-01-30 20:29:54 +01:00
problem_029 Add pep8-naming to pre-commit hooks and fixes incorrect naming conventions (#7062) 2022-10-13 00:54:20 +02:00
problem_030 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_031 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_032 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_033 Enable ruff SIM102 rule (#11341) 2024-04-02 03:27:56 +02:00
problem_034 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_035 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_036 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_037 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_038 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_039 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_040 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_041 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_042 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_043 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_044 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_045 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_046 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_047 [pre-commit.ci] pre-commit autoupdate (#12234) 2024-10-22 11:22:34 +02:00
problem_048 The black formatter is no longer beta (#5960) 2022-01-30 20:29:54 +01:00
problem_049 Unify O(sqrt(N)) is_prime functions under project_euler (#6258) 2022-09-14 09:40:04 +01:00
problem_050 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_051 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_052 Add Flake8 comprehensions to pre-commit (#7235) 2022-10-15 19:29:42 +02:00
problem_053 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_054 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_055 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_056 Use compiled black as the pre-commit formatter (#11247) 2024-01-16 09:39:54 +01:00
problem_057 Project Euler 57 - Square root convergents (#3259) 2020-10-16 21:17:35 +05:30
problem_058 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_059 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_062 Add Flake8 comprehensions to pre-commit (#7235) 2022-10-15 19:29:42 +02:00
problem_063 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_064 Make some ruff fixes (#8154) 2023-03-01 17:23:33 +01:00
problem_065 Add flake8-builtins to pre-commit and fix errors (#7105) 2022-10-13 19:53:59 +05:30
problem_067 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_068 Add more ruff rules (#8767) 2023-05-26 09:34:17 +02:00
problem_069 The black formatter is no longer beta (#5960) 2022-01-30 20:29:54 +01:00
problem_070 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_071 Rename Project Euler directories and other dependent changes (#3300) 2020-10-15 12:43:28 +05:30
problem_072 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_073 feat: add Project Euler problem 073 solution 1 (#6273) 2022-10-24 18:59:49 +05:30
problem_074 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_075 Replace bandit, flake8, isort, and pyupgrade with ruff (#8178) 2023-03-15 13:58:25 +01:00
problem_076 Rename Project Euler directories and other dependent changes (#3300) 2020-10-15 12:43:28 +05:30
problem_077 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_078 Improve Project Euler problem 078 solution 1 (#5708) 2021-10-31 11:36:53 +01:00
problem_079 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_080 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_081 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_082 Add Project Euler problem 082 solution 1 (#6282) 2023-03-02 10:25:47 +05:30
problem_085 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_086 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_087 Added solution for Project Euler problem 87. (#3141) 2020-10-29 12:19:33 +05:30
problem_089 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_091 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_092 Enable ruff PGH003 rule (#11345) 2024-04-02 21:29:34 +02:00
problem_094 Add Project Euler problem 94 solution 1 (#8599) 2023-04-01 17:50:08 +05:30
problem_097 [pre-commit.ci] pre-commit autoupdate (#11473) 2024-07-02 07:02:29 +02:00
problem_099 [mypy] fix type annotations for all Project Euler problems (#4747) 2021-10-12 00:33:44 +08:00
problem_100 Add Project Euler problem 100 solution 1 (#8175) 2023-03-14 11:09:36 +05:30
problem_101 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_102 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_104 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_107 Enable ruff SIM102 rule (#11341) 2024-04-02 03:27:56 +02:00
problem_109 Make some ruff fixes (#8154) 2023-03-01 17:23:33 +01:00
problem_112 [pre-commit.ci] pre-commit autoupdate (#9013) 2023-08-29 15:18:10 +02:00
problem_113 [pre-commit.ci] pre-commit autoupdate (#6629) 2022-10-03 22:00:45 +02:00
problem_114 feat: add Project Euler problem 114 solution 1 (#6300) 2022-08-07 07:37:35 +05:30
problem_115 feat: add Project Euler problem 115 solution 1 (#6303) 2022-08-07 16:50:45 +05:30
problem_116 Add Project Euler problem 116 solution 1 (#6305) 2022-09-24 18:04:00 +01:00
problem_117 Add Project Euler problem 117 solution 1 (#6872) 2023-03-02 22:21:48 +05:30
problem_119 Pyupgrade to Python 3.9 (#4718) 2021-09-07 13:37:03 +02:00
problem_120 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_121 feat: Add solution for Project Euler Problem 121 (#4261) 2021-03-20 11:29:48 +05:30
problem_123 [pre-commit.ci] pre-commit autoupdate (#12398) 2024-11-25 21:46:20 +01:00
problem_125 refactor: Move constants outside of variable scope (#7262) 2022-10-16 15:03:29 +05:30
problem_129 Added solution for Project Euler problem 129. (#3113) 2020-11-21 08:22:26 +05:30
problem_131 Add more ruff rules (#8767) 2023-05-26 09:34:17 +02:00
problem_135 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_144 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_145 Enable ruff ARG001 rule (#11321) 2024-03-20 15:00:17 +01:00
problem_173 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_174 Enable ruff RUF002 rule (#11377) 2024-04-22 21:51:47 +02:00
problem_180 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_187 Performance: 75% faster Project Euler 187 (#10503) 2023-10-15 11:17:22 +02:00
problem_188 Add flake8 pluin flake8 bugbear to pre-commit (#7132) 2022-10-13 18:03:06 +02:00
problem_191 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_203 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_205 The black formatter is no longer beta (#5960) 2022-01-30 20:29:54 +01:00
problem_206 Project Euler 206 Solution (#3829) 2020-11-02 23:24:20 +05:30
problem_207 Enable ruff SIM102 rule (#11341) 2024-04-02 03:27:56 +02:00
problem_234 The black formatter is no longer beta (#5960) 2022-01-30 20:29:54 +01:00
problem_301 The black formatter is no longer beta (#5960) 2022-01-30 20:29:54 +01:00
problem_493 [pre-commit.ci] pre-commit autoupdate (#9543) 2023-10-07 21:32:28 +02:00
problem_551 [pre-commit.ci] pre-commit autoupdate (#11322) 2024-03-13 07:52:41 +01:00
problem_587 feat: add Project Euler problem 587 solution 1 (#6269) 2022-07-26 21:45:14 +05:30
problem_686 Fix some typos in solution 1 of euler 686 (#6112) 2022-05-12 11:28:45 +08:00
problem_800 Add Project Euler problem 800 solution 1 (#8567) 2023-04-01 17:48:13 +05:30
__init__.py Add __init__.py files in all the directories (#2503) 2020-09-28 19:42:36 +02:00
README.md Fix broken links to Gitter Community (Fixes: #8197) (#8546) 2023-03-26 18:20:47 +02:00

Project Euler

Problems are taken from https://projecteuler.net/, the Project Euler. Problems are licensed under CC BY-NC-SA 4.0.

Project Euler is a series of challenging mathematical/computer programming problems that require more than just mathematical insights to solve. Project Euler is ideal for mathematicians who are learning to code.

The solutions will be checked by our automated testing on GitHub Actions with the help of this script. The efficiency of your code is also checked. You can view the top 10 slowest solutions on GitHub Actions logs (under slowest 10 durations) and open a pull request to improve those solutions.

Solution Guidelines

Welcome to TheAlgorithms/Python! Before reading the solution guidelines, make sure you read the whole Contributing Guidelines as it won't be repeated in here. If you have any doubt on the guidelines, please feel free to state it clearly in an issue or ask the community in Gitter. You can use the template we have provided below as your starting point but be sure to read the Coding Style part first.

Coding Style

  • Please maintain consistency in project directory and solution file names. Keep the following points in mind:

    • Create a new directory only for the problems which do not exist yet.
    • If you create a new directory, please create an empty __init__.py file inside it as well.
    • Please name the project directory as problem_<problem_number> where problem_number should be filled with 0s so as to occupy 3 digits. Example: problem_001, problem_002, problem_067, problem_145, and so on.
  • Please provide a link to the problem and other references, if used, in the module-level docstring.

  • All imports should come after the module-level docstring.

  • You can have as many helper functions as you want but there should be one main function called solution which should satisfy the conditions as stated below:

    • It should contain positional argument(s) whose default value is the question input. Example: Please take a look at Problem 1 where the question is to Find the sum of all the multiples of 3 or 5 below 1000. In this case the main solution function will be solution(limit: int = 1000).
    • When the solution function is called without any arguments like so: solution(), it should return the answer to the problem.
  • Every function, which includes all the helper functions, if any, and the main solution function, should have doctest in the function docstring along with a brief statement mentioning what the function is about.

    • There should not be a doctest for testing the answer as that is done by our GitHub Actions build using this script. Keeping in mind the above example of Problem 1:
    def solution(limit: int = 1000):
        """
        A brief statement mentioning what the function is about.
    
        You can have a detailed explanation about the solution method in the
        module-level docstring.
    
        >>> solution(1)
        ...
        >>> solution(16)
        ...
        >>> solution(100)
        ...
        """
    

Solution Template

You can use the below template as your starting point but please read the Coding Style first to understand how the template works.

Please change the name of the helper functions accordingly, change the parameter names with a descriptive one, replace the content within [square brackets] (including the brackets) with the appropriate content.

"""
Project Euler Problem [problem number]: [link to the original problem]

... [Entire problem statement] ...

... [Solution explanation - Optional] ...

References [Optional]:
- [Wikipedia link to the topic]
- [Stackoverflow link]
...

"""
import module1
import module2
...

def helper1(arg1: [type hint], arg2: [type hint], ...) -> [Return type hint]:
    """
    A brief statement explaining what the function is about.

    ... A more elaborate description ... [Optional]

    ...
    [Doctest]
    ...

    """
    ...
    # calculations
    ...

    return


# You can have multiple helper functions but the solution function should be
# after all the helper functions ...


def solution(arg1: [type hint], arg2: [type hint], ...) -> [Return type hint]:
    """
    A brief statement mentioning what the function is about.

    You can have a detailed explanation about the solution in the
    module-level docstring.

    ...
    [Doctest as mentioned above]
    ...

    """

    ...
    # calculations
    ...

    return answer


if __name__ == "__main__":
    print(f"{solution() = }")