project euler problem 173 https projecteuler netproblem173 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 thirtytwo square tiles we can form two different square laminae with onehundred tiles and not necessarily using all of the tiles at one time it is possible to form fortyone different square laminae using up to one million tiles how many different square laminae can be formed return the number of different square laminae that can be formed using up to one million tiles solution100 41 return the number of different square laminae that can be formed using up to one million tiles solution 100 41
from math import ceil, sqrt


def solution(limit: int = 1000000) -> int:
    
    answer = 0

    for outer_width in range(3, (limit // 4) + 2):
        if outer_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

    return answer


if __name__ == "__main__":
    print(f"{solution() = }")