Как оптимизировать повторные вызовы `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 избавляет от повторного разбора цифр.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее