Кешируйте сумму цифр каждой координаты отдельно, поскольку значение зависит только от координаты, а не от клетки. Для ограниченного диапазона можно заранее построить массив значений.
Как оптимизировать повторные вызовы `sum_digits`, когда одинаковые координаты участвуют в проверках многих клеток?
Кешируйте сумму цифр каждой координаты отдельно, поскольку значение зависит только от координаты, а не от клетки. Для ограниченного диапазона можно заранее построить массив значений.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Кешируйте сумму цифр каждой координаты отдельно, поскольку значение зависит только от координаты, а не от клетки. Для ограниченного диапазона можно заранее построить массив значений.
from functools import lru_cache
@lru_cache(maxsize=100_000)
def sum_digits(value):
value = abs(value)
total = 0
while value:
total += value % 10
value //= 10
return total
При проверке клетки используйте sum_digits(x) + sum_digits(y). Ноль корректно даёт 0. Размер кеша выбирают по диапазону и памяти, а cache_info() помогает оценить пользу. Для плотного заранее известного диапазона предвычисление по формуле d[n] = d[n // 10] + n % 10 избавляет от повторного разбора цифр.