• Можете пожалуйста помочь с решением задач?

    NikitaStepin, сорри, конец года, работы много.
    У меня вот такой скрипт выдает все вариант собрать сумму.
    Второй шаг взять из этих вариантов те, которые не пересекаются, чтобы узнать максимально возможное число вариантов.

    def coins_sets(list_of_coins, target_sum, cur_coin, cur_coins_set, result, remaining_sum):
        if sum(cur_coins_set) > target_sum or (remaining_sum + sum(cur_coins_set)) < target_sum:
            return
    
        if sum(cur_coins_set) == target_sum:
            result.add(tuple(cur_coins_set))
            return
    
        for i in range(cur_coin, len(list_of_coins)):
            coins_sets(list_of_coins, target_sum, i + 1, [*cur_coins_set, list_of_coins[cur_coin]], result, remaining_sum - list_of_coins[cur_coin])
    
    list_of_coins = [1, 1, 1, 1, 2, 3, 3, 5, 5, 5, 10, 10, 15, 20, 20, 25, 50, 50, 100]
    target_sum = 25
    
    result = set()
    coins_sets(list_of_coins, target_sum, 0, [], result, sum(list_of_coins))
    
    for cs in result:
        print(cs)
    Написано
  • Как оптимизировать sql запрос?

    xiiicool, можно еще попробовать в cte убрать оконные функции и сделать

    Select min(rr.endAt), max(rr.endAt)
    ..... 
    group by rr.value, rr.rateTimemaskUUID, rr.billIncUUID, rr.notes, rr.name, rr.destinationUUID
    Написано
  • Как набрать нужную сумму из определенного количества монет?

    Возможно я где-то накосячил, но вот такой вариант работает у меня:

    def find_coins_set(list_of_coins, target):
        result = []
        cur_sum = []
    
        left_ind, right_ind = 0, len(list_of_coins) - 1
    
        left_stop, right_stop = 0, len(list_of_coins) - 1
    
        while left_ind < right_ind:
            if list_of_coins[right_ind] > target:
                right_ind -= 1
                continue
    
            if sum(cur_sum) + list_of_coins[right_ind] == target:  cur_sum.append(list_of_coins[right_ind])
                result.append(cur_sum)
                right_ind -= 1
                right_stop = right_ind
                cur_sum = []
                continue
    
            if sum(cur_sum) + list_of_coins[left_ind] == target:           cur_sum.append(list_of_coins[left_ind])
                result.append(cur_sum)
                left_ind += 1
                left_stop = left_ind
                cur_sum = []
                continue
    
            if sum(cur_sum) + list_of_coins[right_ind] < target:      cur_sum.append(list_of_coins[right_ind])
                right_ind -= 1
                continue
    
            if sum(cur_sum) + list_of_coins[left_ind] < target:        cur_sum.append(list_of_coins[left_ind])
                left_ind += 1
                continue
    
            if sum(cur_sum) + list_of_coins[right_ind] > target and right_ind < right_stop:         cur_sum.delete(list_of_coins[right_ind])
                right_ind += 1
                continue
    
     
            if sum(cur_sum) + list_of_coins[left_ind] > target and left_ind > left_stop:          cur_sum.delete(list_of_coins[left_ind])
                left_ind -= 1
                continue
    
        return result
    
     
    list_of_coins = [1,1,2,3,3,5,5,5,10,10,15,20,20,25,50,50,100]
    
    list_of_coins.sort()
    
    target = 35
    
    max_count = sum(filter(lambda x: x <= target, list_of_coins))//target
    
    print(f'max count {max_count}')
    
    print(find_coins_set(list_of_coins, target))


    Возможно выравнивание кривое, из онлайн идешки скопировал.

    Скрипт нашел три набора монет.
    Написано
  • Как в MySQL посчитать сумму всех значений (положительных и отрицательных), но вывести все что больше нуля?

    Алиас может не прокатить в having, лучше всю агрегирующую функцию написать.
    HAVING SUM(quantity) > 0

    Ну и COALESCE не нужен если в поле quantity не хранятся null-ы, а если хранятся, то будет warning что такое нельзя агрегировать и COALESCE никак не поможет.
    Написано
  • Очень странное поведение MYSQL c LIMIT?

    GeKskill, а это странно. У вас в запросах есть distinct. А значит под капотом есть и сортировка.
    Написано
  • Где я могу найти "точно" описанную документацию Python?

    Phys_Math_Man, такое к сожалению возможно, если ты пилишь пет-проект. В проме у тебя, как разработчика столько работы, что доку ты физически не осилишь. Кроме того, все осложняется тем, что одну фичу пилит команда разработчиков и всех мотивировать на поддержание актуальности доки очень сложно. Также часто случается испраление ошибок и рефактортнг. И после каждого изменения в коде нужно чекать доку. А еще и ПМ со сроками напирает. Поэтому актуальная дока это очень сложно и дорого, а потому ее редко где есть.
    Написано
  • Где я могу найти "точно" описанную документацию Python?

    Phys_Math_Man, любая документация почти всегда отстает от кода и не содержит всех нюансов.
    То что вам нужно, можно взять только из исходников.
    Написано
  • Где я могу найти "точно" описанную документацию Python?

    А что есть полное описание? У вас есть пример?
    Написано
  • Как ускорить поиск по бд MySQL?

    Rsa97, однобатовые скорее всего не выйдет использовать если это магазин и там товары на кирилице, то будет юникод.

    Но по факту врядли там будут сотни тысяч товаров, это уже уровень мвидео или озона. Так что скорее всего того, что есть сейчас автору вопроса хватит, а с ростом бизнеса просто перейдут на специализированный софт.
    Написано
  • Как ускорить поиск по бд MySQL?

    Rsa97, У меня была похожая задача, но мне не требовался like, а хватало полного совпаления пути. И чтобы индекс работал я создал отдельное поле, где зранил sha256 хэш от пути и это поле уже нормально индексиркется. Правда для поиска нужно вычислять хэш от пути. И при вставке новых категорий нужно проверять коллизии, хотя вероятность коллизий не большая.
    Написано
  • Как ускорить поиск по бд MySQL?

    Rsa97, это да. Но тогда возможно все придет к исходному варианту с джойнами. Так как юзер пишет текст, а по тексту нужно наиграть строку айдишников.
    Написано
  • Как ускорить поиск по бд MySQL?

    Тут есть нюанс, на очень длинных строках индексы плохо работают. И этот вариант можется скатиться к table scan.
    В задасе заявлены категории и товары, т.е. вероятность длинных путей очень большая.
    Написано
  • Как увеличивать счетчик в условиях конкуренции?

    У insert есть опция игноривать duplicate key.
    Можно вот так попробовать:
    Вначале
    INSERT  IGNORE INTO your_table VALUES (1);
    SELECT ROW_COUNT();


    И если количество строк вернулось 0,
    тогда запускать второй запрос с update
    Написано
  • Как можно ускорить выполнение SQL запроса?

    Akina, не всегда быстрее. Если в выборку попадает 1% всех строк таблицы, то скан не быстрее. А группировка часто под капотом включает сортировку, это можно в плане запроса увидеть. Тут как оптимизатор посчитает правильным так исделает.
    Написано
  • Как можно ускорить выполнение SQL запроса?

    Akina, тут не должно быть фулл скан.
    Если в секции in небольшая выборка всех возможных значений, то не нужно весь индекс сканировать. Скан будет только по той части, где сработало условие по первому полю(это потому что индекс по сути дерево и его значения отсортированы)
    Написано
  • Как выбрать все родительские категории в одну колонку?

    Aljo, первая часть запроса - первый шаг рекурсии. А вторая, то что выпоняется на последующих шагах.
    Обратите внимание на поле level.
    В первом запросе оно 1 AS level, а в остальных level +1. На наждом шаге рекурсии поле level увеличивается.
    Написано
  • Почему 3 секунд не хватает для выполнения кода?

    WSGlebKavash, в целях перфекционизма можно ещё немного порефакторить код. Например вынести из цикла часль if, которые срабатывают только один раз. А так шаг за шагом мы пришли примерно к тому о чем писал Wataru Wataru
  • Почему 3 секунд не хватает для выполнения кода?

    WSGlebKavash, вам не нужно копировать списки каждый раз чтобы взять суммы. Тут суммы i - й итерации равны сумме i-1 итерации плюс два новых элемент один из одного массива (минимального) , а второй из другого (максимального).
  • Почему 3 секунд не хватает для выполнения кода?

    WSGlebKavash, следующий шаг - попробуйте не добавлять элементы в новые списки а сразу суммировать минимальные в одну переменную, а максимальные во вторую, а далее после цикла суммирования сравнивать значения этих двух переменных.
  • Как решить задачку "ЛИРИК = 0,5*ФИЗИКА" на ЯП?

    Rsa97, видимо не все ограничения вписал. Возможно автор вопрос найдёт ошибку и поправит.