From f225be49bef7c8b1b8e8e6b6733be14723096ed8 Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Tue, 23 Jun 2020 19:36:27 -0400 Subject: [PATCH 01/22] Create __init__.py --- project_euler/problem_47/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 project_euler/problem_47/__init__.py diff --git a/project_euler/problem_47/__init__.py b/project_euler/problem_47/__init__.py new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/project_euler/problem_47/__init__.py @@ -0,0 +1 @@ + From 388bec412a1fb8dc9cddf5a4e20f7f92e27f634f Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Tue, 23 Jun 2020 19:51:20 -0400 Subject: [PATCH 02/22] Initial commit Not sure if this should be formatted differently. I'm open to ideas! --- project_euler/problem_47/sol1.py | 97 ++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 project_euler/problem_47/sol1.py diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py new file mode 100644 index 000000000000..9e265d5376b6 --- /dev/null +++ b/project_euler/problem_47/sol1.py @@ -0,0 +1,97 @@ +""" +Combinatoric selections + +Problem 47 + +The first two consecutive numbers to have two distinct prime factors are: + +14 = 2 × 7 +15 = 3 × 5 + +The first three consecutive numbers to have three distinct prime factors are: + +644 = 2² × 7 × 23 +645 = 3 × 5 × 43 +646 = 2 × 17 × 19. + +Find the first four consecutive integers to have four distinct prime factors each. +What is the first of these numbers? +""" + +from functools import lru_cache + + +def unique_prime_factors(n): + i = 2 + factors = set() + while i * i <= n: + if n % i: + i += 1 + else: + n //= i + factors.add(i) + if n > 1: + factors.add(n) + return factors + + +# Tests based on given problem solutions +def test_upf(): + assert (unique_prime_factors(14) == set([2, 7])), "Error: unique_prime_factors(14)" + assert (unique_prime_factors(15) == set([3, 5])), "Error: unique_prime_factors(15)" + assert (unique_prime_factors(644) == set([2, 7, 23])), "Error: unique_prime_factors(644)" + assert (unique_prime_factors(645) == set([3, 5, 43])), "Error: unique_prime_factors(645)" + assert (unique_prime_factors(646) == set([2, 17, 19])), "Error: unique_prime_factors(646)" + + +@lru_cache(maxsize=5) +def upf_len(num): + """Helper function to memoize upf() length results for a given value.""" + return len(unique_prime_factors(num)) + + + +def equality(iterable): + """Check equality of all elements in hashable interable.""" + if iterable[:1]: + return iterable[1:] == iterable[:-1] + + +def run(n): + """Run core process to find solution.""" + + i = 2 + + success = 0 + + out = [] + + while success < 1: + # Increment each value of a generated range + group = list(map(lambda x, y=i: y + x, [i for i in range(n)])) + + # Run elements through out unique_prime_factors function + # Append our target number to the end. + checker = list(map(upf_len, group)) + checker.append(n) + + # If all numbers in the list are euqal, increment our success variable + # to exit the while loop and return the current group of numbers. + if equality(checker): + success += 1 + return group + i += 1 + +def solution(N=4): + """Returns the first value of the first four consecutive integers to have four distinct prime factors each. + >>> solution() + 134043 + """ + results = run(N) + if len(results) > 0: + return results[0] + + +if __name__ == "__main__": + test_upf() + print(solution()) From 71b432e89db83ea727c873b411b6a9dce495477b Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Tue, 23 Jun 2020 20:13:16 -0400 Subject: [PATCH 03/22] Completing testing/updates Ran code through `black`, `flake8`, and `doctest`. Added some type hints. `doctest` is finicky on sets, so I had to sort and reformat as set to pass those tests. --- project_euler/problem_47/sol1.py | 66 +++++++++++++++++++------------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index 9e265d5376b6..16974d8d117f 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -21,7 +21,18 @@ from functools import lru_cache -def unique_prime_factors(n): +def unique_prime_factors(n: int) -> set: + """ + Function to find unique prime factors of an integer. + Tests include sorting because only the set really matters, + not the order in which it is produced. + >>> set(sorted(unique_prime_factors(14))) + {2, 7} + >>> set(sorted(unique_prime_factors(644))) + {2, 23, 7} + >>> set(sorted(unique_prime_factors(646))) + {17, 2, 19} + """ i = 2 factors = set() while i * i <= n: @@ -35,37 +46,39 @@ def unique_prime_factors(n): return factors -# Tests based on given problem solutions -def test_upf(): - assert (unique_prime_factors(14) == set([2, 7])), "Error: unique_prime_factors(14)" - assert (unique_prime_factors(15) == set([3, 5])), "Error: unique_prime_factors(15)" - assert (unique_prime_factors(644) == set([2, 7, 23])), "Error: unique_prime_factors(644)" - assert (unique_prime_factors(645) == set([3, 5, 43])), "Error: unique_prime_factors(645)" - assert (unique_prime_factors(646) == set([2, 17, 19])), "Error: unique_prime_factors(646)" - - @lru_cache(maxsize=5) -def upf_len(num): - """Helper function to memoize upf() length results for a given value.""" +def upf_len(num: int) -> int: + """ + Helper function to memoize upf() length results for a given value. + >>> upf_len(14) + 2 + """ return len(unique_prime_factors(num)) - -def equality(iterable): - """Check equality of all elements in hashable interable.""" +def equality(iterable: list) -> bool: + """ + Check equality of ALL elements in an interable. + >>> equality([1,2,3,4]) + False + >>> equality([2,2,2,2]) + True + """ if iterable[:1]: return iterable[1:] == iterable[:-1] -def run(n): - """Run core process to find solution.""" - +def run(n: int) -> list: + """ + Function that runs core process to find problem solution. + >>> run(3) + [644, 645, 646] + """ + i = 2 - + success = 0 - - out = [] - + while success < 1: # Increment each value of a generated range group = list(map(lambda x, y=i: y + x, [i for i in range(n)])) @@ -82,8 +95,10 @@ def run(n): return group i += 1 -def solution(N=4): - """Returns the first value of the first four consecutive integers to have four distinct prime factors each. + +def solution(N: int = 4) -> int: + """Returns the first value of the first four consecutive integers to have four + distinct prime factors each. >>> solution() 134043 """ @@ -93,5 +108,4 @@ def solution(N=4): if __name__ == "__main__": - test_upf() - print(solution()) + print(solution()) From 61cbe18b5302e75a9c058d8740ffa7d9e9f25010 Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 08:36:12 -0400 Subject: [PATCH 04/22] Update project_euler/problem_47/sol1.py Nice. Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index 16974d8d117f..aebc52961827 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -64,7 +64,7 @@ def equality(iterable: list) -> bool: >>> equality([2,2,2,2]) True """ - if iterable[:1]: + return len(set(iterable)) in (0, 1) return iterable[1:] == iterable[:-1] From ce4d67053c27ae4b4d6c517363a283c89751b3da Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 08:49:23 -0400 Subject: [PATCH 05/22] Update project_euler/problem_47/sol1.py Looks good Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index aebc52961827..a6a16d04d8bf 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -79,7 +79,7 @@ def run(n: int) -> list: success = 0 - while success < 1: + while True: # Increment each value of a generated range group = list(map(lambda x, y=i: y + x, [i for i in range(n)])) From 24498984381ca959faa815dbee119787c0354bda Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 08:55:33 -0400 Subject: [PATCH 06/22] Update project_euler/problem_47/sol1.py Okay, this should work. Thank you for the reminder on map(), filter(), reduce(). Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index a6a16d04d8bf..ce31a46665ab 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -85,7 +85,7 @@ def run(n: int) -> list: # Run elements through out unique_prime_factors function # Append our target number to the end. - checker = list(map(upf_len, group)) + checker = [upf_len(x) for x in group] checker.append(n) # If all numbers in the list are euqal, increment our success variable From 0947926d46ed7468a2eec0969b1872d8689bf6a8 Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 08:56:12 -0400 Subject: [PATCH 07/22] Update project_euler/problem_47/sol1.py My IDE needs a spellchecker. Or, lighter comment font. Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index ce31a46665ab..3656fdcafab3 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -88,7 +88,7 @@ def run(n: int) -> list: checker = [upf_len(x) for x in group] checker.append(n) - # If all numbers in the list are euqal, increment our success variable + # If all numbers in the list are equal, increment our success variable # to exit the while loop and return the current group of numbers. if equality(checker): success += 1 From 8a4cdf91fb3b8a8a8d59824afa11e2cf67a3bb09 Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 08:56:41 -0400 Subject: [PATCH 08/22] Update project_euler/problem_47/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 1 - 1 file changed, 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index 3656fdcafab3..13b06273df78 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -91,7 +91,6 @@ def run(n: int) -> list: # If all numbers in the list are equal, increment our success variable # to exit the while loop and return the current group of numbers. if equality(checker): - success += 1 return group i += 1 From 3d10e34ca40cded70a0d6d205256996fa9ec5b88 Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 08:58:02 -0400 Subject: [PATCH 09/22] Update project_euler/problem_47/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index 13b06273df78..64dc605799dc 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -102,7 +102,7 @@ def solution(N: int = 4) -> int: 134043 """ results = run(N) - if len(results) > 0: + return results[0] if len(results) else None return results[0] From e96cb25d9032fd8bbdd1b0e89b970ba681b5a778 Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 08:59:04 -0400 Subject: [PATCH 10/22] Update project_euler/problem_47/sol1.py This means that `results = run(N)` should be updated to `results = run(n)`, correct? Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index 64dc605799dc..ad2f514a0438 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -95,7 +95,7 @@ def run(n: int) -> list: i += 1 -def solution(N: int = 4) -> int: +def solution(n: int = 4) -> int: """Returns the first value of the first four consecutive integers to have four distinct prime factors each. >>> solution() From 0bb6352fa4e22dffb9240c28fb4a9092243eb82d Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 08:59:20 -0400 Subject: [PATCH 11/22] Update project_euler/problem_47/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 1 - 1 file changed, 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index ad2f514a0438..04a10f3c4601 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -77,7 +77,6 @@ def run(n: int) -> list: i = 2 - success = 0 while True: # Increment each value of a generated range From c3d3887fce2d2eed4e011107accd1b8997d0f701 Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 08:59:38 -0400 Subject: [PATCH 12/22] Update project_euler/problem_47/sol1.py Looks good! Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index 04a10f3c4601..2626c25d700e 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -63,6 +63,8 @@ def equality(iterable: list) -> bool: False >>> equality([2,2,2,2]) True + >>> equality([1, 2, 3, 2, 1]) + True """ return len(set(iterable)) in (0, 1) return iterable[1:] == iterable[:-1] From 97bcaaa2f17399bea52465cf11f6ebc55f8d4dbc Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 08:59:46 -0400 Subject: [PATCH 13/22] Update project_euler/problem_47/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index 2626c25d700e..eeb26ffbe867 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -61,7 +61,7 @@ def equality(iterable: list) -> bool: Check equality of ALL elements in an interable. >>> equality([1,2,3,4]) False - >>> equality([2,2,2,2]) + >>> equality([2, 2, 2, 2]) True >>> equality([1, 2, 3, 2, 1]) True From 1c2ef0bbd0b1d95cbb9c171b64dbd3358b0a5bca Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 08:59:51 -0400 Subject: [PATCH 14/22] Update project_euler/problem_47/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index eeb26ffbe867..e1a726681289 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -59,7 +59,7 @@ def upf_len(num: int) -> int: def equality(iterable: list) -> bool: """ Check equality of ALL elements in an interable. - >>> equality([1,2,3,4]) + >>> equality([1, 2, 3, 4]) False >>> equality([2, 2, 2, 2]) True From 3cdc62c70145e23d03cf7c1dd5b68b893fd71009 Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 09:07:15 -0400 Subject: [PATCH 15/22] Update project_euler/problem_47/sol1.py Works for me! I spent way too much time getting this to pass doctest, so any improvement is welcome. Co-authored-by: Christian Clauss --- project_euler/problem_47/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index e1a726681289..f95e7d1ae7e9 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -26,7 +26,7 @@ def unique_prime_factors(n: int) -> set: Function to find unique prime factors of an integer. Tests include sorting because only the set really matters, not the order in which it is produced. - >>> set(sorted(unique_prime_factors(14))) + >>> sorted(set(unique_prime_factors(14))) {2, 7} >>> set(sorted(unique_prime_factors(644))) {2, 23, 7} From 2df1f5a43da79778401e4ccb9de415abb8ca2bdd Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 09:22:28 -0400 Subject: [PATCH 16/22] Update sol1.py Added some suggested changes from the pull request: * Updated tests outputs in `unique_prime_factors` function. * Changed `@lru_cache(maxsize=5)` to `@lru_cache(maxsize=None)` * Removed duplicate `return` line in `equality` function * Changed `i` to `base` in run function. * Added some commentary to `run()` function. * Replaced `group = list(map(lambda x: base + x, [i for i in range(n)]))` with `group = [base + i for i in range(n)]` --- project_euler/problem_47/sol1.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index f95e7d1ae7e9..4a5cfd6297b8 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -27,11 +27,11 @@ def unique_prime_factors(n: int) -> set: Tests include sorting because only the set really matters, not the order in which it is produced. >>> sorted(set(unique_prime_factors(14))) - {2, 7} + [2, 7] >>> set(sorted(unique_prime_factors(644))) - {2, 23, 7} + [2, 7, 23] >>> set(sorted(unique_prime_factors(646))) - {17, 2, 19} + [2, 17, 19] """ i = 2 factors = set() @@ -46,7 +46,7 @@ def unique_prime_factors(n: int) -> set: return factors -@lru_cache(maxsize=5) +@lru_cache(maxsize=None) def upf_len(num: int) -> int: """ Helper function to memoize upf() length results for a given value. @@ -67,7 +67,6 @@ def equality(iterable: list) -> bool: True """ return len(set(iterable)) in (0, 1) - return iterable[1:] == iterable[:-1] def run(n: int) -> list: @@ -76,24 +75,27 @@ def run(n: int) -> list: >>> run(3) [644, 645, 646] """ - - i = 2 - + + # Incrementor variable for our group list comprehension. + # This serves as the first number in each list of values + # to test. + base = 2 while True: # Increment each value of a generated range - group = list(map(lambda x, y=i: y + x, [i for i in range(n)])) + group = [base + i for i in range(n)] # Run elements through out unique_prime_factors function # Append our target number to the end. checker = [upf_len(x) for x in group] checker.append(n) - # If all numbers in the list are equal, increment our success variable - # to exit the while loop and return the current group of numbers. + # If all numbers in the list are equal, return the group variable. if equality(checker): return group - i += 1 + + # Increment our base variable by 1 + base += 1 def solution(n: int = 4) -> int: @@ -104,7 +106,6 @@ def solution(n: int = 4) -> int: """ results = run(N) return results[0] if len(results) else None - return results[0] if __name__ == "__main__": From def54a93f21ea34169b81c54d0b4af7fc8c9b827 Mon Sep 17 00:00:00 2001 From: Mark Moretto Date: Wed, 24 Jun 2020 10:23:37 -0400 Subject: [PATCH 17/22] Update sol1.py --- project_euler/problem_47/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index 4a5cfd6297b8..d3de381f2e44 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -104,7 +104,7 @@ def solution(n: int = 4) -> int: >>> solution() 134043 """ - results = run(N) + results = run(n) return results[0] if len(results) else None From 9603f48d40a62c808240a1d6a52d06cccc48e7aa Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Wed, 24 Jun 2020 17:10:51 +0200 Subject: [PATCH 18/22] Trailing whitespace --- project_euler/problem_47/sol1.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index d3de381f2e44..06d053ee30df 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -75,7 +75,7 @@ def run(n: int) -> list: >>> run(3) [644, 645, 646] """ - + # Incrementor variable for our group list comprehension. # This serves as the first number in each list of values # to test. @@ -93,8 +93,8 @@ def run(n: int) -> list: # If all numbers in the list are equal, return the group variable. if equality(checker): return group - - # Increment our base variable by 1 + + # Increment our base variable by 1 base += 1 From 7443e130d34907f2fdcdb5248a285e89bf15e6bf Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Wed, 24 Jun 2020 18:57:57 +0200 Subject: [PATCH 19/22] Update sol1.py --- project_euler/problem_47/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index 06d053ee30df..a66c02a6971f 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -93,7 +93,7 @@ def run(n: int) -> list: # If all numbers in the list are equal, return the group variable. if equality(checker): return group - + # Increment our base variable by 1 base += 1 From b148beca91787c5e5af89225fa1b62e885b8461f Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Wed, 24 Jun 2020 19:40:54 +0200 Subject: [PATCH 20/22] Update __init__.py From 3b7e0b0e864e15e26c3257ecdfeaac38911ee33e Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Wed, 24 Jun 2020 19:46:44 +0200 Subject: [PATCH 21/22] Update sol1.py --- project_euler/problem_47/sol1.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/project_euler/problem_47/sol1.py b/project_euler/problem_47/sol1.py index a66c02a6971f..fab8ffde9052 100644 --- a/project_euler/problem_47/sol1.py +++ b/project_euler/problem_47/sol1.py @@ -23,7 +23,7 @@ def unique_prime_factors(n: int) -> set: """ - Function to find unique prime factors of an integer. + Find unique prime factors of an integer. Tests include sorting because only the set really matters, not the order in which it is produced. >>> sorted(set(unique_prime_factors(14))) @@ -46,10 +46,10 @@ def unique_prime_factors(n: int) -> set: return factors -@lru_cache(maxsize=None) +@lru_cache def upf_len(num: int) -> int: """ - Helper function to memoize upf() length results for a given value. + Memoize upf() length results for a given value. >>> upf_len(14) 2 """ @@ -71,7 +71,7 @@ def equality(iterable: list) -> bool: def run(n: int) -> list: """ - Function that runs core process to find problem solution. + Runs core process to find problem solution. >>> run(3) [644, 645, 646] """ @@ -99,7 +99,7 @@ def run(n: int) -> list: def solution(n: int = 4) -> int: - """Returns the first value of the first four consecutive integers to have four + """Return the first value of the first four consecutive integers to have four distinct prime factors each. >>> solution() 134043 From fe303291d4f8d1293abc6e3dee9d8bece5d16886 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Wed, 24 Jun 2020 19:53:20 +0200 Subject: [PATCH 22/22] Update __init__.py