From 83aa457981cbedc1a92df5e395ef2b44cc2a5626 Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Tue, 27 Dec 2022 19:16:24 +0330 Subject: [PATCH 01/19] add maths/Gcd of N Numbers --- maths/gcd_of_n_numbers.py | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 maths/gcd_of_n_numbers.py diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py new file mode 100644 index 000000000000..38a3dd91a49d --- /dev/null +++ b/maths/gcd_of_n_numbers.py @@ -0,0 +1,51 @@ +from collections import Counter + +""" +Gcd of N Numbers +""" + +def get_factors(number: int, factors: dict | None = None, min_factor: int = 2) -> Counter: + """ + get all factors of number: + >>> get_factors(45) + Counter({3: 2, 5: 1}) + >>> get_factors(2520) + Counter({2: 3, 3: 2, 5: 1, 7: 1}) + >>> get_factors(23) + Counter({23: 1}) + """ + if factors is None: + factors = Counter() + + + if number == min_factor: + factors[min_factor] += 1 + return factors + + if not number % min_factor: + factors[min_factor] += 1 + return get_factors(number // min_factor, factors, min_factor) + else: + return get_factors(number, factors, min_factor + 1) + +def get_gcd(*numbers: int) -> int: + """ + get gcd of n numbers: + >>> get_gcd(18, 48) + 9 + >>> get_gcd(23, 37) + 1 + >>> get_gcd(2520, 8350) + 10 + """ + data = [get_factors(number) for number in numbers] + same_factors = data[0] + for d in data[1:]: + same_factors = same_factors & d + mult = 1 + for m in [factor ** same_factors[factor] for factor in same_factors]: + mult *= m + return mult + +if __name__ == "__main__": + print(get_gcd(18, 45)) # 9 \ No newline at end of file From 1dd128434be5d2dbe8daaa7a61ac01d61c175b7e Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Tue, 27 Dec 2022 19:19:17 +0330 Subject: [PATCH 02/19] add maths/Gcd of N Numbers --- maths/gcd_of_n_numbers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 38a3dd91a49d..dce0cd1e0a84 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -31,7 +31,7 @@ def get_factors(number: int, factors: dict | None = None, min_factor: int = 2) - def get_gcd(*numbers: int) -> int: """ get gcd of n numbers: - >>> get_gcd(18, 48) + >>> get_gcd(18, 45) 9 >>> get_gcd(23, 37) 1 From 89b8336b47f56ee47c2225c85d270ab0c20eda9b Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Tue, 27 Dec 2022 19:50:36 +0330 Subject: [PATCH 03/19] add maths/Gcd of N Numbers --- maths/gcd_of_n_numbers.py | 66 +++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 23 deletions(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index dce0cd1e0a84..ef644a1b98ca 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -1,51 +1,71 @@ -from collections import Counter - """ Gcd of N Numbers +Reference: https://en.wikipedia.org/wiki/Greatest_common_divisor """ -def get_factors(number: int, factors: dict | None = None, min_factor: int = 2) -> Counter: +from collections import Counter + + +def get_factors(number: int, factors: dict | None = None, factor: int = 2) -> Counter: """ - get all factors of number: + this is a reccursive function for get all factors of number >>> get_factors(45) Counter({3: 2, 5: 1}) >>> get_factors(2520) Counter({2: 3, 3: 2, 5: 1, 7: 1}) >>> get_factors(23) Counter({23: 1}) + + factor can be all numbers from 2 to number that we check if number % factor == 0 + if it is equal to zero, we check again with number // factor else we increase factor by one """ - if factors is None: + + if not isinstance(number, int): + raise TypeError("number must be integer") + + if factors is None: + # first call of get factors and so there are no founded factors factors = Counter() - - - if number == min_factor: - factors[min_factor] += 1 + + if number == factor: # break condition + # all numbers are factors of itself + factors[factor] += 1 return factors - - if not number % min_factor: - factors[min_factor] += 1 - return get_factors(number // min_factor, factors, min_factor) - else: - return get_factors(number, factors, min_factor + 1) - -def get_gcd(*numbers: int) -> int: + + if number % factor > 0: + # if it is grater than zero, so it is not a factor of number and we check next number + return get_factors(number, factors, factor + 1) + + factors[factor] += 1 + # else we update factors (that is Counter(dict-like) type) and check again + return get_factors(number // factor, factors, factor) + + +def get_greatest_common_divisor(*numbers: int) -> int: """ get gcd of n numbers: - >>> get_gcd(18, 45) + >>> get_greatest_common_divisor(18, 45) 9 - >>> get_gcd(23, 37) + >>> get_greatest_common_divisor(23, 37) 1 - >>> get_gcd(2520, 8350) + >>> get_greatest_common_divisor(2520, 8350) 10 """ + # we just need factors, not numbers itself data = [get_factors(number) for number in numbers] - same_factors = data[0] + same_factors: dict = data[0] for d in data[1:]: - same_factors = same_factors & d + same_factors = same_factors & d + # get common factor between all,`&` return common elements with smaller value (for Counter type) + + # now, same_factors is something like {2: 2, 3: 4} that means 2 * 2 * 3 * 3 * 3 * 3 mult = 1 + # power each factor and multiply + # for {2: 2, 3: 4}, it is [4, 81] and then 324 for m in [factor ** same_factors[factor] for factor in same_factors]: mult *= m return mult + if __name__ == "__main__": - print(get_gcd(18, 45)) # 9 \ No newline at end of file + print(get_greatest_common_divisor(18, 45)) # 9 From 3747c460362d69fc03224df57ac68183ee7378e7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Dec 2022 16:23:47 +0000 Subject: [PATCH 04/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/gcd_of_n_numbers.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index ef644a1b98ca..5266d2bae9ff 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -15,7 +15,7 @@ def get_factors(number: int, factors: dict | None = None, factor: int = 2) -> Co Counter({2: 3, 3: 2, 5: 1, 7: 1}) >>> get_factors(23) Counter({23: 1}) - + factor can be all numbers from 2 to number that we check if number % factor == 0 if it is equal to zero, we check again with number // factor else we increase factor by one """ @@ -23,11 +23,11 @@ def get_factors(number: int, factors: dict | None = None, factor: int = 2) -> Co if not isinstance(number, int): raise TypeError("number must be integer") - if factors is None: - # first call of get factors and so there are no founded factors + if factors is None: + # first call of get factors and so there are no founded factors factors = Counter() - if number == factor: # break condition + if number == factor: # break condition # all numbers are factors of itself factors[factor] += 1 return factors @@ -55,9 +55,9 @@ def get_greatest_common_divisor(*numbers: int) -> int: data = [get_factors(number) for number in numbers] same_factors: dict = data[0] for d in data[1:]: - same_factors = same_factors & d + same_factors = same_factors & d # get common factor between all,`&` return common elements with smaller value (for Counter type) - + # now, same_factors is something like {2: 2, 3: 4} that means 2 * 2 * 3 * 3 * 3 * 3 mult = 1 # power each factor and multiply From 899618646fe256864a1b201585d4cb8e827fd0e7 Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Tue, 27 Dec 2022 20:21:38 +0330 Subject: [PATCH 05/19] add maths/Gcd of N Numbers --- maths/gcd_of_n_numbers.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index ef644a1b98ca..e2affacb0cf8 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -6,7 +6,7 @@ from collections import Counter -def get_factors(number: int, factors: dict | None = None, factor: int = 2) -> Counter: +def get_factors(number: int, factors: Counter | None = None, factor: int = 2) -> Counter: """ this is a reccursive function for get all factors of number >>> get_factors(45) @@ -17,7 +17,8 @@ def get_factors(number: int, factors: dict | None = None, factor: int = 2) -> Co Counter({23: 1}) factor can be all numbers from 2 to number that we check if number % factor == 0 - if it is equal to zero, we check again with number // factor else we increase factor by one + if it is equal to zero, we check again with number // factor + else we increase factor by one """ if not isinstance(number, int): @@ -33,7 +34,8 @@ def get_factors(number: int, factors: dict | None = None, factor: int = 2) -> Co return factors if number % factor > 0: - # if it is grater than zero, so it is not a factor of number and we check next number + # if it is grater than zero + # so it is not a factor of number and we check next number return get_factors(number, factors, factor + 1) factors[factor] += 1 @@ -53,10 +55,11 @@ def get_greatest_common_divisor(*numbers: int) -> int: """ # we just need factors, not numbers itself data = [get_factors(number) for number in numbers] - same_factors: dict = data[0] + same_factors: Counter = data[0] for d in data[1:]: same_factors = same_factors & d - # get common factor between all,`&` return common elements with smaller value (for Counter type) + # get common factor between all + # `&` return common elements with smaller value (for Counter type) # now, same_factors is something like {2: 2, 3: 4} that means 2 * 2 * 3 * 3 * 3 * 3 mult = 1 From c774f82158eeac30faaaa581665ab0e69e87c210 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Dec 2022 16:55:48 +0000 Subject: [PATCH 06/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/gcd_of_n_numbers.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 4e718a9f9773..b6f18e4723e2 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -6,7 +6,9 @@ from collections import Counter -def get_factors(number: int, factors: Counter | None = None, factor: int = 2) -> Counter: +def get_factors( + number: int, factors: Counter | None = None, factor: int = 2 +) -> Counter: """ this is a reccursive function for get all factors of number >>> get_factors(45) @@ -57,10 +59,10 @@ def get_greatest_common_divisor(*numbers: int) -> int: data = [get_factors(number) for number in numbers] same_factors: Counter = data[0] for d in data[1:]: - same_factors = same_factors & d + same_factors = same_factors & d # get common factor between all # `&` return common elements with smaller value (for Counter type) - + # now, same_factors is something like {2: 2, 3: 4} that means 2 * 2 * 3 * 3 * 3 * 3 mult = 1 # power each factor and multiply From 0200bd61668d10c4b64dd0fa130e9e9a672aef89 Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Tue, 27 Dec 2022 20:27:34 +0330 Subject: [PATCH 07/19] add maths/Gcd of N Numbers --- maths/gcd_of_n_numbers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 4e718a9f9773..d4e3e1f27fa5 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -8,7 +8,7 @@ def get_factors(number: int, factors: Counter | None = None, factor: int = 2) -> Counter: """ - this is a reccursive function for get all factors of number + this is a recursive function for get all factors of number >>> get_factors(45) Counter({3: 2, 5: 1}) >>> get_factors(2520) From da603f6ad4558818bd33095633698490a6dc7648 Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Wed, 28 Dec 2022 01:31:56 +0330 Subject: [PATCH 08/19] add maths/Gcd of N Numbers --- maths/gcd_of_n_numbers.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 8ebfcad7ae1e..12014588064a 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -17,18 +17,31 @@ def get_factors( Counter({2: 3, 3: 2, 5: 1, 7: 1}) >>> get_factors(23) Counter({23: 1}) + >>> get_factors(0) + Traceback (most recent call last): + ... + TypeError: number must be integer and greater than zero + >>> get_factors(-1) + Traceback (most recent call last): + ... + TypeError: number must be integer and greater than zero + >>> get_factors(1.5) + Traceback (most recent call last): + ... + TypeError: number must be integer and greater than zero factor can be all numbers from 2 to number that we check if number % factor == 0 if it is equal to zero, we check again with number // factor else we increase factor by one """ - if not isinstance(number, int): - raise TypeError("number must be integer") + match number: + case int(num) if number > 0: + number = num + case _: + raise TypeError("number must be integer and greater than zero") - if factors is None: - # first call of get factors and so there are no founded factors - factors = Counter() + factors = factors or Counter() if number == factor: # break condition # all numbers are factors of itself @@ -36,7 +49,7 @@ def get_factors( return factors if number % factor > 0: - # if it is grater than zero + # if it is greater than zero # so it is not a factor of number and we check next number return get_factors(number, factors, factor + 1) @@ -55,8 +68,13 @@ def get_greatest_common_divisor(*numbers: int) -> int: >>> get_greatest_common_divisor(2520, 8350) 10 """ + # we just need factors, not numbers itself - data = [get_factors(number) for number in numbers] + try: + data = [get_factors(number) for number in numbers] + except TypeError as e: + raise Exception("numbers must be integer and greater than zero") from e + same_factors: Counter = data[0] for d in data[1:]: same_factors = same_factors & d From 95e67aab3d61011142fa96329b7e240c26acc332 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Dec 2022 22:03:15 +0000 Subject: [PATCH 09/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/gcd_of_n_numbers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 12014588064a..abac20b9bca4 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -68,13 +68,13 @@ def get_greatest_common_divisor(*numbers: int) -> int: >>> get_greatest_common_divisor(2520, 8350) 10 """ - + # we just need factors, not numbers itself try: data = [get_factors(number) for number in numbers] except TypeError as e: raise Exception("numbers must be integer and greater than zero") from e - + same_factors: Counter = data[0] for d in data[1:]: same_factors = same_factors & d From 27f48bd19d8b32e7590398610b7e7b62a64c47b4 Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Wed, 28 Dec 2022 01:51:23 +0330 Subject: [PATCH 10/19] add maths/Gcd of N Numbers --- maths/gcd_of_n_numbers.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 12014588064a..7f5632228bb8 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -67,6 +67,20 @@ def get_greatest_common_divisor(*numbers: int) -> int: 1 >>> get_greatest_common_divisor(2520, 8350) 10 + >>> get_greatest_common_divisor(-10, 20) + Traceback (most recent call last): + ... + Exception: numbers must be integer and greater than zero + >>> get_greatest_common_divisor(1.5, 2) + Traceback (most recent call last): + ... + Exception: numbers must be integer and greater than zero + >>> get_greatest_common_divisor(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) + 1 + >>> get_greatest_common_divisor("1", 2, 3, 4, 5, 6, 7, 8, 9, 10) + Traceback (most recent call last): + ... + Exception: numbers must be integer and greater than zero """ # we just need factors, not numbers itself From 2f660fcebb416601ee1c2d32e646c61b8deb1480 Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Wed, 28 Dec 2022 01:58:29 +0330 Subject: [PATCH 11/19] add maths/Gcd of N Numbers --- maths/gcd_of_n_numbers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 4bbaae591783..b0bb9232eeaf 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -36,6 +36,8 @@ def get_factors( """ match number: + case int(number) if number == 1: + return Counter({1: 1}) case int(num) if number > 0: number = num case _: From 4099e95e2e7718989119aa66799528fdaaf279ab Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Wed, 11 Jan 2023 01:30:18 +0330 Subject: [PATCH 12/19] more pythonic --- maths/gcd_of_n_numbers.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index b0bb9232eeaf..3583e5dc3549 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -4,6 +4,7 @@ """ from collections import Counter +from functools import reduce def get_factors( @@ -87,23 +88,19 @@ def get_greatest_common_divisor(*numbers: int) -> int: # we just need factors, not numbers itself try: - data = [get_factors(number) for number in numbers] + same_factors, *factors = map(get_factors, numbers) except TypeError as e: raise Exception("numbers must be integer and greater than zero") from e - same_factors: Counter = data[0] - for d in data[1:]: - same_factors = same_factors & d + for factor in factors: + same_factors &= factor # get common factor between all # `&` return common elements with smaller value (for Counter type) # now, same_factors is something like {2: 2, 3: 4} that means 2 * 2 * 3 * 3 * 3 * 3 - mult = 1 # power each factor and multiply # for {2: 2, 3: 4}, it is [4, 81] and then 324 - for m in [factor ** same_factors[factor] for factor in same_factors]: - mult *= m - return mult + return reduce(lambda x, y: x * y, (factor ** power for factor, power in same_factors.items())) if __name__ == "__main__": From ec207a87971e3bfe4ded7e5689c42367bb580693 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 10 Jan 2023 22:01:25 +0000 Subject: [PATCH 13/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/gcd_of_n_numbers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 3583e5dc3549..d75ccf85d4f1 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -100,7 +100,9 @@ def get_greatest_common_divisor(*numbers: int) -> int: # now, same_factors is something like {2: 2, 3: 4} that means 2 * 2 * 3 * 3 * 3 * 3 # power each factor and multiply # for {2: 2, 3: 4}, it is [4, 81] and then 324 - return reduce(lambda x, y: x * y, (factor ** power for factor, power in same_factors.items())) + return reduce( + lambda x, y: x * y, (factor**power for factor, power in same_factors.items()) + ) if __name__ == "__main__": From 840603598a812c36161338e71bc650541d2e93f2 Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Wed, 11 Jan 2023 01:39:07 +0330 Subject: [PATCH 14/19] more pythonic --- maths/gcd_of_n_numbers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 3583e5dc3549..8199b8d3277e 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -100,7 +100,7 @@ def get_greatest_common_divisor(*numbers: int) -> int: # now, same_factors is something like {2: 2, 3: 4} that means 2 * 2 * 3 * 3 * 3 * 3 # power each factor and multiply # for {2: 2, 3: 4}, it is [4, 81] and then 324 - return reduce(lambda x, y: x * y, (factor ** power for factor, power in same_factors.items())) + return reduce(lambda x, y: x * y, (factor ** power for factor, power in same_factors.items()), 1) if __name__ == "__main__": From d5681d8dfcbb2e1f87f8270046bd9a34475de4cf Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 10 Jan 2023 22:13:28 +0000 Subject: [PATCH 15/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/gcd_of_n_numbers.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 8199b8d3277e..e7ee0aa987ce 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -100,7 +100,11 @@ def get_greatest_common_divisor(*numbers: int) -> int: # now, same_factors is something like {2: 2, 3: 4} that means 2 * 2 * 3 * 3 * 3 * 3 # power each factor and multiply # for {2: 2, 3: 4}, it is [4, 81] and then 324 - return reduce(lambda x, y: x * y, (factor ** power for factor, power in same_factors.items()), 1) + return reduce( + lambda x, y: x * y, + (factor**power for factor, power in same_factors.items()), + 1, + ) if __name__ == "__main__": From db4f11b18c715c0d193767905ee4f68d405e0ddf Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Wed, 11 Jan 2023 02:02:41 +0330 Subject: [PATCH 16/19] merged --- maths/gcd_of_n_numbers.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 8199b8d3277e..013810744fb6 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -4,7 +4,6 @@ """ from collections import Counter -from functools import reduce def get_factors( @@ -98,9 +97,12 @@ def get_greatest_common_divisor(*numbers: int) -> int: # `&` return common elements with smaller value (for Counter type) # now, same_factors is something like {2: 2, 3: 4} that means 2 * 2 * 3 * 3 * 3 * 3 + mult = 1 # power each factor and multiply # for {2: 2, 3: 4}, it is [4, 81] and then 324 - return reduce(lambda x, y: x * y, (factor ** power for factor, power in same_factors.items()), 1) + for m in [factor ** power for factor, power in same_factors.items()]: + mult *= m + return mult if __name__ == "__main__": From b7473dd50e3d101aff5d7ac6ed30b4f246446303 Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Wed, 11 Jan 2023 02:05:28 +0330 Subject: [PATCH 17/19] merged --- maths/gcd_of_n_numbers.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 013810744fb6..4cdf54a7489d 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -100,9 +100,17 @@ def get_greatest_common_divisor(*numbers: int) -> int: mult = 1 # power each factor and multiply # for {2: 2, 3: 4}, it is [4, 81] and then 324 +<<<<<<< HEAD for m in [factor ** power for factor, power in same_factors.items()]: mult *= m return mult +======= + return reduce( + lambda x, y: x * y, + (factor**power for factor, power in same_factors.items()), + 1, + ) +>>>>>>> d5681d8dfcbb2e1f87f8270046bd9a34475de4cf if __name__ == "__main__": From a230d7e06c5d501b41a68f7c0c92c8af57de1443 Mon Sep 17 00:00:00 2001 From: MohammadReza Balakhaniyan Date: Wed, 11 Jan 2023 02:06:06 +0330 Subject: [PATCH 18/19] more readable --- maths/gcd_of_n_numbers.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 4cdf54a7489d..013810744fb6 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -100,17 +100,9 @@ def get_greatest_common_divisor(*numbers: int) -> int: mult = 1 # power each factor and multiply # for {2: 2, 3: 4}, it is [4, 81] and then 324 -<<<<<<< HEAD for m in [factor ** power for factor, power in same_factors.items()]: mult *= m return mult -======= - return reduce( - lambda x, y: x * y, - (factor**power for factor, power in same_factors.items()), - 1, - ) ->>>>>>> d5681d8dfcbb2e1f87f8270046bd9a34475de4cf if __name__ == "__main__": From d351516e451a068d70e55fc262fa29ae6f47db44 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 10 Jan 2023 22:40:34 +0000 Subject: [PATCH 19/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/gcd_of_n_numbers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py index 013810744fb6..63236c236ada 100644 --- a/maths/gcd_of_n_numbers.py +++ b/maths/gcd_of_n_numbers.py @@ -100,7 +100,7 @@ def get_greatest_common_divisor(*numbers: int) -> int: mult = 1 # power each factor and multiply # for {2: 2, 3: 4}, it is [4, 81] and then 324 - for m in [factor ** power for factor, power in same_factors.items()]: + for m in [factor**power for factor, power in same_factors.items()]: mult *= m return mult