• Как можно ускорить алгоритм?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Какое-то время я посвятил играм с простыми числами. В студенчестве еще.
    Вот тут не надо каждый раз прибавлять единичку.
    if (K % (i + 1) == 0) {
    Ее просто надо учесть в условиях цикла.
    if (K % i == 0) {
    Далее. Если нужно найти первый попавшийся делитель - то не надо перебирать все числа. Достаточно только 2 и все нечетные. Или даже лучше задать хард-кодом таблицу простых чисел до 2^16. Это как раз будет половина разрядной сетки int32.
    int primes[] = { 2,3,5,7,11,13,17...... 65521 }
    Это даст хорошее ускорение для поиска. Хотя время загрузки executable может увеличится. Кстати у меня много вопросов к бенчмаркам где стоит запредельно короткое время инициализации (0.25 s). Здесь - практически невозможно вычленить где время занимает алгоритм а где - просто запуск процесса операционки. Обычно когда меряют что-то подобное - меряют длительные процессы хотя-бы порядка минут но никак не секунд.
    Ответ написан
    2 комментария
  • Как можно ускорить алгоритм?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вы правильно поняли, что вам надо найти минимальный делитель числа K.

    Проблема в том, что если число K простое - то вы будете проходиться до него. Есть трюк - достаточно проверять только числа до корня из K. Ведь если у числа есть какой-то минимальный собственный (меньше него самого) делитель, то он точно меньше корня (потому что делителей как минимум два, и если минимальный из них больше корня, то их произведение - больше самого числа).

    Если вы не нашли делителя до корня, то число простое и в качестве делитеял можно брать все K и тогда ответ будет K-1.
    Ответ написан
    2 комментария
  • Как можно реализовать фильтрацию текста на python?

    @alexbprofit
    Junior SE
    проверять содержит ли текст хотябы одно из запрещенных слов, к примеру:

    banned = ['жираф']
    def text_contains_banned(text):
        for word in banned:
            if word in text:
                return False
        return True
    Ответ написан
    Комментировать
  • Как можно реализовать фильтрацию текста на python?

    Vindicar
    @Vindicar
    RTFM!
    Ну во-первых - это будет соревнование брони и снаряда, т.к. пользователи будут пытаться обходить ваш блэклист. Так что не ожидайте, что решение будет "раз и навсегда".
    Во-вторых, должно ли сообщение содержать хоть одно слово из белого списка, чтобы быть пропущенным? Не очень ясно, что вы имели ввиду под белым списком.
    В-третьих, и сообщение, и элементы фильтра должны подвергаться предварительной нормализации. Речь не только о приведении к регистру, но и работе с омографами (простейший случай - русское и латинское "о"), а также удалении некоторых символов (например, символ невидимого пробела или комбинаторные символы). Можно решить, заменяя перед проверкой разные символы на простейший омограф, например, русское о на латинское - как в сообщении, так и при подготовке черного и белого списков.
    В-четвёртых, нужно подумать о ложных срабатываниях. Грубо говоря, если мы не удаляем пробелы, пользователю достаточно написать "б л я" чтобы обойти нашу систему. Если удаляем, "гребля" будет давать ложное положительное срабатывание. Если занесём "гребля" в белый список и сделаем так, чтобы оно имело приоритет перед пересекающимся словом из чёрного списка - то тогда будет ложное отрицательное срабатывание на "игре бля". Разумеется, список слов зависит от контекста сообщений, но его составление будет долгим итерационным процессом.

    С учётом вышесказанного -
    1. нормализовать строку,
    2. проверить вхождение подстрок из чёрного списка,
    3. если они есть - проверить, есть ли вхождения подстрок из белого списка, пересекающиеся с вхождениями чёрного.
    4. убрать из рассмотрения все пересекающиеся вхождения чёрного списка
    5. если остались вхождения из чёрного списка - реагируем на сообщение как на нежелательное. Иначе считаем его допустимым.
    Ответ написан
    Комментировать
  • Как с помощью discord бота сохранить файлы от пользователя на свой компьютер?

    Vindicar
    @Vindicar
    RTFM!
    discord.py
    Событие on_message для обработки входящих и исходящих сообщений (пример).
    Свойство attachments объекта Message, чтобы проверить прикреплённые файлы.
    Если же сброшенное изображение - это ссылка, то тут нужно регулярками шерстить текст сообщения.
    Ответ написан
    Комментировать