From 743eead592c580a89597a426693eae6c5e1cee62 Mon Sep 17 00:00:00 2001 From: Alok Shukla <20066073+shuklalok@users.noreply.github.com> Date: Mon, 4 May 2020 00:50:55 +0530 Subject: [PATCH 1/9] Solution for Euler Problem 26 --- project_euler/problem_26/__init__.py | 0 project_euler/problem_26/sol1.py | 49 ++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 project_euler/problem_26/__init__.py create mode 100644 project_euler/problem_26/sol1.py diff --git a/project_euler/problem_26/__init__.py b/project_euler/problem_26/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/project_euler/problem_26/sol1.py b/project_euler/problem_26/sol1.py new file mode 100644 index 000000000000..7a02377ffa5e --- /dev/null +++ b/project_euler/problem_26/sol1.py @@ -0,0 +1,49 @@ +""" +Eular Problem 26 +https://projecteuler.net/problem=26 +Find the value of d < 1000 for which 1/d contains the longest recurring cycle +in its decimal fraction part. +""" + +NUM = 1 + + +def find_digit(numerator: int, digit: int) -> int: + """ + Considering any range can be provided, + becasue as per the problem, the digit d < 1000 + :param n: + :param d: + :return: + >>> find_digit(1, 10) + 7 + >>> find_digit(10, 100) + 97 + >>> find_digit(10, 1000) + 983 + """ + global NUM + NUM = numerator + the_digit = 1 + longest_list_length = 0 + + for divide_by_number in range(numerator, digit + 1): + has_been_divided = [] + now_divide = NUM + for division_cycle in range(1, digit + 1): + if now_divide in has_been_divided: + if longest_list_length < len(has_been_divided): + longest_list_length = len(has_been_divided) + the_digit = divide_by_number + else: + has_been_divided.append(now_divide) + now_divide = now_divide * 10 % divide_by_number + + return the_digit + + +# Tests +if __name__ == "__main__": + import doctest + + doctest.testmod() From 897eff7d917eb110a2eae4381c5703da6a1e78a4 Mon Sep 17 00:00:00 2001 From: Alok Shukla <20066073+shuklalok@users.noreply.github.com> Date: Mon, 4 May 2020 01:24:39 +0530 Subject: [PATCH 2/9] Update project_euler/problem_26/sol1.py typo error fix. Co-authored-by: Christian Clauss --- project_euler/problem_26/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_26/sol1.py b/project_euler/problem_26/sol1.py index 7a02377ffa5e..69deb94f812b 100644 --- a/project_euler/problem_26/sol1.py +++ b/project_euler/problem_26/sol1.py @@ -11,7 +11,7 @@ def find_digit(numerator: int, digit: int) -> int: """ Considering any range can be provided, - becasue as per the problem, the digit d < 1000 + because as per the problem, the digit d < 1000 :param n: :param d: :return: From ff5e07d3cf988fdbdac0e5f180986dea0860cb80 Mon Sep 17 00:00:00 2001 From: Alok Shukla <20066073+shuklalok@users.noreply.github.com> Date: Mon, 4 May 2020 01:34:02 +0530 Subject: [PATCH 3/9] Update project_euler/problem_26/sol1.py typo error fix Co-authored-by: Christian Clauss --- project_euler/problem_26/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_26/sol1.py b/project_euler/problem_26/sol1.py index 69deb94f812b..d02de0cb32c2 100644 --- a/project_euler/problem_26/sol1.py +++ b/project_euler/problem_26/sol1.py @@ -1,5 +1,5 @@ """ -Eular Problem 26 +Euler Problem 26 https://projecteuler.net/problem=26 Find the value of d < 1000 for which 1/d contains the longest recurring cycle in its decimal fraction part. From 6f25e27383355b8d0788a3091c06a2cc14f0c9e0 Mon Sep 17 00:00:00 2001 From: Alok Shukla <20066073+shuklalok@users.noreply.github.com> Date: Mon, 4 May 2020 01:35:47 +0530 Subject: [PATCH 4/9] Update project_euler/problem_26/sol1.py ok to remove, this comes from Pycharm automatically when docstring is added. Co-authored-by: Christian Clauss --- project_euler/problem_26/sol1.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/project_euler/problem_26/sol1.py b/project_euler/problem_26/sol1.py index d02de0cb32c2..653552b2965f 100644 --- a/project_euler/problem_26/sol1.py +++ b/project_euler/problem_26/sol1.py @@ -12,9 +12,6 @@ def find_digit(numerator: int, digit: int) -> int: """ Considering any range can be provided, because as per the problem, the digit d < 1000 - :param n: - :param d: - :return: >>> find_digit(1, 10) 7 >>> find_digit(10, 100) From e684708398373c96181d397e37066d1601d6e6f1 Mon Sep 17 00:00:00 2001 From: Alok Shukla <20066073+shuklalok@users.noreply.github.com> Date: Mon, 4 May 2020 01:37:31 +0530 Subject: [PATCH 5/9] Update project_euler/problem_26/sol1.py ok to remove. Co-authored-by: Christian Clauss --- project_euler/problem_26/sol1.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/project_euler/problem_26/sol1.py b/project_euler/problem_26/sol1.py index 653552b2965f..7c68c4d0a354 100644 --- a/project_euler/problem_26/sol1.py +++ b/project_euler/problem_26/sol1.py @@ -19,8 +19,6 @@ def find_digit(numerator: int, digit: int) -> int: >>> find_digit(10, 1000) 983 """ - global NUM - NUM = numerator the_digit = 1 longest_list_length = 0 From 99013c5f1300fa0630c54f71c7daf67c86d26b05 Mon Sep 17 00:00:00 2001 From: Alok Shukla <20066073+shuklalok@users.noreply.github.com> Date: Mon, 4 May 2020 01:37:41 +0530 Subject: [PATCH 6/9] Update project_euler/problem_26/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_26/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_26/sol1.py b/project_euler/problem_26/sol1.py index 7c68c4d0a354..b78babf44cb8 100644 --- a/project_euler/problem_26/sol1.py +++ b/project_euler/problem_26/sol1.py @@ -32,7 +32,7 @@ def find_digit(numerator: int, digit: int) -> int: the_digit = divide_by_number else: has_been_divided.append(now_divide) - now_divide = now_divide * 10 % divide_by_number + now_divide *= 10 % divide_by_number return the_digit From ed3e9512eee56ae23945a036fdfe755266d68228 Mon Sep 17 00:00:00 2001 From: Alok Shukla <20066073+shuklalok@users.noreply.github.com> Date: Mon, 4 May 2020 01:37:48 +0530 Subject: [PATCH 7/9] Update project_euler/problem_26/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_26/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_26/sol1.py b/project_euler/problem_26/sol1.py index b78babf44cb8..4ed0a89eb51d 100644 --- a/project_euler/problem_26/sol1.py +++ b/project_euler/problem_26/sol1.py @@ -24,7 +24,7 @@ def find_digit(numerator: int, digit: int) -> int: for divide_by_number in range(numerator, digit + 1): has_been_divided = [] - now_divide = NUM + now_divide = numerator for division_cycle in range(1, digit + 1): if now_divide in has_been_divided: if longest_list_length < len(has_been_divided): From 382d89601d21ca92d4c8e6e480d4b2ee164a323a Mon Sep 17 00:00:00 2001 From: Alok Shukla <20066073+shuklalok@users.noreply.github.com> Date: Mon, 4 May 2020 01:37:58 +0530 Subject: [PATCH 8/9] Update project_euler/problem_26/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_26/sol1.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/project_euler/problem_26/sol1.py b/project_euler/problem_26/sol1.py index 4ed0a89eb51d..16b4c2208103 100644 --- a/project_euler/problem_26/sol1.py +++ b/project_euler/problem_26/sol1.py @@ -5,9 +5,6 @@ in its decimal fraction part. """ -NUM = 1 - - def find_digit(numerator: int, digit: int) -> int: """ Considering any range can be provided, From b837cdab359b7313871b69c34869fda81b615b7d Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sun, 3 May 2020 22:43:15 +0200 Subject: [PATCH 9/9] now_divide = now_divide * 10 % divide_by_number --- project_euler/problem_26/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_26/sol1.py b/project_euler/problem_26/sol1.py index 16b4c2208103..7b8c44c9c828 100644 --- a/project_euler/problem_26/sol1.py +++ b/project_euler/problem_26/sol1.py @@ -29,7 +29,7 @@ def find_digit(numerator: int, digit: int) -> int: the_digit = divide_by_number else: has_been_divided.append(now_divide) - now_divide *= 10 % divide_by_number + now_divide = now_divide * 10 % divide_by_number return the_digit