



import os

# Precomputes a list of the 100 first triangular numbers
SCREAMING_SNAKE_CASE_:Optional[int]             =						[int(0.5 * n * (n + 1)) for n in range(1, 101)]




def 	__UpperCamelCase	(  )       ->  str:



    """simple docstring"""






    A :       str          =   os.path.dirname(os.path.realpath(_lowerCAmelCase		)		)
    A :       List[str]          =   os.path.join(_lowerCAmelCase      ,     """words.txt"""		)

    A :       str          =   """"""
    with open(_lowerCAmelCase		) as f:
        A :       Union[str, Any]          =   f.readline()

    A :       Dict          =   [word.strip("""\""""		) for word in words.strip("""\r\n"""		).split(""","""		)]
    A :       Dict          =   [
        word
        for word in [sum(ord(_lowerCAmelCase		) - 64 for x in word		) for word in words]
        if word in TRIANGULAR_NUMBERS
    ]
    return len(_lowerCAmelCase		)


if __name__ == "__main__":
     print(solution())







from __future__ import annotations

from math import ceil, floor, sqrt




def 	__UpperCamelCase	(  _lowerCAmelCase = 200_0000		)       ->  int:



    """simple docstring"""






    A :       list[int]          =   [0]
    A :       int

    for idx in range(1      ,     ceil(sqrt(target * 2		) * 1.1		)		):
        triangle_numbers.append(triangle_numbers[-1] + idx		)

    # we want this to be as close as possible to target
    A :       int          =   0
    # the area corresponding to the grid that gives the product closest to target
    A :       int          =   0
    # an estimate of b, using the quadratic formula
    A :       float
    # the largest integer less than b_estimate
    A :       int
    # the largest integer less than b_estimate
    A :       int
    # the triangle number corresponding to b_floor
    A :       int
    # the triangle number corresponding to b_ceil
    A :       int

    for idx_a, triangle_a in enumerate(triangle_numbers[1:]      ,     1		):
        A :       Union[str, Any]          =   (-1 + sqrt(1 + 8 * target / triangle_a		)) / 2
        A :       List[Any]          =   floor(_lowerCAmelCase		)
        A :       Tuple          =   ceil(_lowerCAmelCase		)
        A :       int          =   triangle_numbers[b_floor]
        A :       Dict          =   triangle_numbers[b_ceil]

        if abs(target - triangle_b_first_guess * triangle_a		) < abs(
            target - best_product		):
            A :       Optional[int]          =   triangle_b_first_guess * triangle_a
            A :       Optional[int]          =   idx_a * b_floor

        if abs(target - triangle_b_second_guess * triangle_a		) < abs(
            target - best_product		):
            A :       Tuple          =   triangle_b_second_guess * triangle_a
            A :       Tuple          =   idx_a * b_ceil

    return area


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


