mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-27 15:01:08 +00:00
Created problem_39 in project_euler (#2330)
* Create __init__.py * Add files via upload * Update sol1.py * Update sol1.py * Update project_euler/problem_39/sol1.py Co-authored-by: Christian Clauss <cclauss@me.com> * Update sol1.py Co-authored-by: Christian Clauss <cclauss@me.com>
This commit is contained in:
parent
051be078e4
commit
9a32f0b46c
1
project_euler/problem_39/__init__.py
Normal file
1
project_euler/problem_39/__init__.py
Normal file
|
@ -0,0 +1 @@
|
|||
#
|
39
project_euler/problem_39/sol1.py
Normal file
39
project_euler/problem_39/sol1.py
Normal file
|
@ -0,0 +1,39 @@
|
|||
"""
|
||||
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
|
||||
from collections import Counter
|
||||
|
||||
|
||||
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)
|
||||
Counter({12: 1})
|
||||
>>> pythagorean_triple(40)
|
||||
Counter({12: 1, 30: 1, 24: 1, 40: 1, 36: 1})
|
||||
>>> pythagorean_triple(50)
|
||||
Counter({12: 1, 30: 1, 24: 1, 40: 1, 36: 1, 48: 1})
|
||||
"""
|
||||
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
|
||||
if hypotenuse == int((hypotenuse)):
|
||||
perimeter = int(base + perpendicular + hypotenuse)
|
||||
if perimeter > max_perimeter:
|
||||
continue
|
||||
else:
|
||||
triplets[perimeter] += 1
|
||||
return triplets
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
triplets = pythagorean_triple(1000)
|
||||
print(f"{triplets.most_common()[0][0] = }")
|
Loading…
Reference in New Issue
Block a user