From 52a2c9e8407ba5d74ade08d952c2568a543a5d0f Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Tue, 18 Aug 2020 13:24:30 +0530 Subject: [PATCH 1/6] Create __init__.py --- project_euler/problem_39/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 project_euler/problem_39/__init__.py diff --git a/project_euler/problem_39/__init__.py b/project_euler/problem_39/__init__.py new file mode 100644 index 000000000000..792d6005489e --- /dev/null +++ b/project_euler/problem_39/__init__.py @@ -0,0 +1 @@ +# From 278d55771c1c2392462d535f23559bec60056a00 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Tue, 18 Aug 2020 13:26:37 +0530 Subject: [PATCH 2/6] Add files via upload --- project_euler/problem_39/sol1.py | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 project_euler/problem_39/sol1.py diff --git a/project_euler/problem_39/sol1.py b/project_euler/problem_39/sol1.py new file mode 100644 index 000000000000..ba1e96544edb --- /dev/null +++ b/project_euler/problem_39/sol1.py @@ -0,0 +1,41 @@ +""" +If p is the perimeter of a right angle triangle with integral length sides, +{a,b,c}, there are exactly three solutions for p = 120. +{20,48,52}, {24,45,51}, {30,40,50} + +For which value of p ≤ 1000, is the number of solutions maximised? +""" + +from typing import Dict + + +def pythagorean_triple(max_perimeter: int) -> Dict: + """ + Returns a dictionary with keys as the perimeter of a right angled triangle + and value as the number of corresponding triplets. + >>> pythagorean_triple(15) + {12: 1} + >>> pythagorean_triple(40) + {12: 1, 30: 1, 24: 1, 40: 1, 36: 1} + >>> pythagorean_triple(50) + {12: 1, 30: 1, 24: 1, 40: 1, 36: 1, 48: 1} + """ + triplets = {} + for base in range(1, max_perimeter + 1): + for perpendicular in range(base, max_perimeter + 1): + hypotenuse = (base * base + perpendicular * perpendicular) ** 0.5 + if hypotenuse == int((hypotenuse)): + perimeter = int(base + perpendicular + hypotenuse) + if perimeter > max_perimeter: + continue + else: + try: + triplets[perimeter] += 1 + except: + triplets[perimeter] = 1 + return triplets + + +if __name__ == "__main__": + triplets = pythagorean_triple(1000) + print(max(triplets, key=lambda key: triplets[key])) From de5e2bc3b59ffa7f6eddd048066c937d38c45143 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Tue, 18 Aug 2020 13:38:48 +0530 Subject: [PATCH 3/6] Update sol1.py --- project_euler/problem_39/sol1.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project_euler/problem_39/sol1.py b/project_euler/problem_39/sol1.py index ba1e96544edb..0d3bb0aec36e 100644 --- a/project_euler/problem_39/sol1.py +++ b/project_euler/problem_39/sol1.py @@ -29,9 +29,9 @@ def pythagorean_triple(max_perimeter: int) -> Dict: if perimeter > max_perimeter: continue else: - try: + if perimeter in triplets: triplets[perimeter] += 1 - except: + else: triplets[perimeter] = 1 return triplets From 844ca0d441aa77b9553aa30e252e2b53e9bf6af2 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Tue, 18 Aug 2020 13:59:58 +0530 Subject: [PATCH 4/6] Update sol1.py --- project_euler/problem_39/sol1.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/project_euler/problem_39/sol1.py b/project_euler/problem_39/sol1.py index 0d3bb0aec36e..1f249c5fce18 100644 --- a/project_euler/problem_39/sol1.py +++ b/project_euler/problem_39/sol1.py @@ -7,6 +7,7 @@ """ from typing import Dict +from collections import Counter def pythagorean_triple(max_perimeter: int) -> Dict: @@ -14,13 +15,13 @@ def pythagorean_triple(max_perimeter: int) -> Dict: Returns a dictionary with keys as the perimeter of a right angled triangle and value as the number of corresponding triplets. >>> pythagorean_triple(15) - {12: 1} + Counter({12: 1}) >>> pythagorean_triple(40) - {12: 1, 30: 1, 24: 1, 40: 1, 36: 1} + Counter({12: 1, 30: 1, 24: 1, 40: 1, 36: 1}) >>> pythagorean_triple(50) - {12: 1, 30: 1, 24: 1, 40: 1, 36: 1, 48: 1} + Counter({12: 1, 30: 1, 24: 1, 40: 1, 36: 1, 48: 1}) """ - triplets = {} + triplets = Counter() for base in range(1, max_perimeter + 1): for perpendicular in range(base, max_perimeter + 1): hypotenuse = (base * base + perpendicular * perpendicular) ** 0.5 From 6490810a5429b874a472e86dbbd0751375325048 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Tue, 18 Aug 2020 14:15:13 +0530 Subject: [PATCH 5/6] Update project_euler/problem_39/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_39/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_39/sol1.py b/project_euler/problem_39/sol1.py index 1f249c5fce18..acf6798d23e6 100644 --- a/project_euler/problem_39/sol1.py +++ b/project_euler/problem_39/sol1.py @@ -39,4 +39,4 @@ def pythagorean_triple(max_perimeter: int) -> Dict: if __name__ == "__main__": triplets = pythagorean_triple(1000) - print(max(triplets, key=lambda key: triplets[key])) + print(f"{triplets.most_common()[0][0] = }") From 12e3ae3501f7c9d141144c5bba9048e9159e5b66 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Tue, 18 Aug 2020 14:38:29 +0530 Subject: [PATCH 6/6] Update sol1.py --- project_euler/problem_39/sol1.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/project_euler/problem_39/sol1.py b/project_euler/problem_39/sol1.py index acf6798d23e6..5c21d4beca8c 100644 --- a/project_euler/problem_39/sol1.py +++ b/project_euler/problem_39/sol1.py @@ -30,10 +30,7 @@ def pythagorean_triple(max_perimeter: int) -> Dict: if perimeter > max_perimeter: continue else: - if perimeter in triplets: - triplets[perimeter] += 1 - else: - triplets[perimeter] = 1 + triplets[perimeter] += 1 return triplets