forked from TheAlgorithms/Python
- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsol1.py
40 lines (29 loc) · 1.2 KB
/
sol1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"""
Project Euler Problem 173: https://projecteuler.net/problem=173
We shall define a square lamina to be a square outline with a square "hole" so that
the shape possesses vertical and horizontal symmetry. For example, using exactly
thirty-two square tiles we can form two different square laminae:
With one-hundred tiles, and not necessarily using all of the tiles at one time, it is
possible to form forty-one different square laminae.
Using up to one million tiles how many different square laminae can be formed?
"""
frommathimportceil, sqrt
defsolution(limit: int=1000000) ->int:
"""
Return the number of different square laminae that can be formed using up to
one million tiles.
>>> solution(100)
41
"""
answer=0
forouter_widthinrange(3, (limit//4) +2):
ifouter_width**2>limit:
hole_width_lower_bound=max(ceil(sqrt(outer_width**2-limit)), 1)
else:
hole_width_lower_bound=1
if (outer_width-hole_width_lower_bound) %2:
hole_width_lower_bound+=1
answer+= (outer_width-hole_width_lower_bound-2) //2+1
returnanswer
if__name__=="__main__":
print(f"{solution() =}")