TheAlgorithms-Python
40 строк · 1.2 Кб
1"""
2Project Euler Problem 173: https://projecteuler.net/problem=173
3
4We shall define a square lamina to be a square outline with a square "hole" so that
5the shape possesses vertical and horizontal symmetry. For example, using exactly
6thirty-two square tiles we can form two different square laminae:
7
8With one-hundred tiles, and not necessarily using all of the tiles at one time, it is
9possible to form forty-one different square laminae.
10
11Using up to one million tiles how many different square laminae can be formed?
12"""
13
14from math import ceil, sqrt15
16
17def solution(limit: int = 1000000) -> int:18"""19Return the number of different square laminae that can be formed using up to
20one million tiles.
21>>> solution(100)
2241
23"""
24answer = 025
26for outer_width in range(3, (limit // 4) + 2):27if outer_width**2 > limit:28hole_width_lower_bound = max(ceil(sqrt(outer_width**2 - limit)), 1)29else:30hole_width_lower_bound = 131if (outer_width - hole_width_lower_bound) % 2:32hole_width_lower_bound += 133
34answer += (outer_width - hole_width_lower_bound - 2) // 2 + 135
36return answer37
38
39if __name__ == "__main__":40print(f"{solution() = }")41