Дано:
Стандартная корзина товаров в магазине
- Товар1 - 100р
- Товар2 - 120р (акция) , базовая цена -150р
- Товар3 - 90р (акция), базовая цена 100р
Общая сумма:
350р
Выгода по акциям:
40р
Итого :
310р
В корзине можно применять промокоды на скидку, кол-во промокодов неограниченно.
Промокод может быть
- Потоварный. Это значит что выгода промокода применяются к каждому товару, например промокод на 10р действующий на 3 товара даст 30р выгоды
- Корзинный. Это значит что он применяется 1 раз к товарам на которые действует (не ко всей корзине), например промокод на 10р действующий на 3 товара даст 10р выгоды
Каждый промокод может быть суммирован с другими (т.е. выгоды складываться) или нет (тогда он может быть единственным активным на корзине, если дает наибольшую выгоду, а остальные отключаются), также он может работать от цены до скидки или после скидки (что имеет значение если скидка в процентах, а не в валюте) и самое важное - промокод может суммироваться с акцией, а может и нет (в таком случае включается режим поиска выгоды - что лучше выгода промокода после применения или акции)
Учитывается также то, что промокоды могут действовать не на всю корзину в целом а только на часть товаров (т.е. сами настройки могут исключать конкретные товары и для данного промокода из не будет существовать)
В случае если суммарная скидка промокодов выходит за пределы стоимости корзины или суммы товаров на которые они действуют - такое сочетание считается невалидным
Необходимо:
Найти наибольшую для пользователю выгоду при наличии промокодов, акций и товаров
Понять как вообще сделать это всё рабочим?
Существуют ли алгоритмы которые могут помочь, или каким-то образом распределить данные чтобы можно было считать итоговую выгоду?
На данный момент я так понимаю существует необходимость расчета возможных корректных комбинаций и выбор из этих комбинации с наибольшей суммой, однако вопрос даже в том как корректно составить эти комбинации.