Cześć!
To mój pierwszy post więc proszę o wyrozumiałość! :)
Poszukując wyposażenia kuchni w trakcie remontu wpadłem na promkę w jednej ze znanych sieciówek, której wytłumaczenie jest proste. Spośród produktów znajdujących się w promocji mamy do wyboru.
Kupić drugi produkt 22% taniej
albo kupić trzeci produkt 44% taniej
albo kupić czwarty produkt 77% taniej
albo kupić piąty produkt za 1zł.
Oczywiście nie musimy wrzucać wszystkiego w jeden koszyk, ba czasem najlepiej jest go podzielić na przyklad na dwa paragony ;)
Chciałbym napisać program, który po podaniu elementów (nw, np w liście) pokaże nam jaki jest najbardziej opłacalny układ "koszyka".
Przykładowo, kupując pięć produktów na promocji
shopping_list = [2500, 2500, 2300, 1700, 1200]
(Oczywiście elementy sortujemy wcześniej według ceny i układamy w "zestawy"). Mamy do wyboru następujące układy koszyka:
1:
2500
2500 -> 2500 * 0,78
2300
1700 -> 1700 * 0,78
1200
2:
2500
2500
2300 -> 2300 * 0,56
1700
1200 -> 1200 * 0,78
3:
2500
2500
2300
1700 -> 1700 * 0,23
1200
4:
2500
2500
2300
1700
1200 -> 1
itd. W powyższym przypadku wygrywa trzeci zestaw.
Oczywiście w przypadku na przykład czterech produktów w koszyku możliwe są kombinacje 2 x 22% rabatu, albo 1x44% rabatu (na trzeci produkt) albo 1 x 77% (na czwarty produkt). Rozpiszę jeszcze case z siedmioma produktami:
first_case = [(1, 2), (3, 4), (5, 6), 7]
# 22% discount on: 2th, 4th, 6th products
second_case = [(1, 2, 3, 4), (5, 6), 7]
# 77% discount on: 4th product, 22% discount on: 6th product
third_case = [(1, 2, 3, 4, 5), (6, 7)]
# 5th product for 1PLN, 22% discount on 7th product
fourth_case = [(1, 2, 3), (4, 5, 6), 7]
# 44% discount on 3th, 44% pn 6th product
fifth_case = [(1, 2), (3, 4, 5), (6, 7)]
# 22% discount on 2th product, 44% on 5th product, 22% on 7th product
sixth_case = [(1, 2, 3, 4), (5, 6, 7)]
# 77% discount on 4th product, 44% on 7th product
Na razie kompletnie nie mam wizji jak podejść do tego tematu. W pierwszym kroku trzeba chyba napisać jakiś mechanizm, który w zależności od ilości elementów w liście pozwoli na wygenerowanie możliwych układów. Później dla każdego układu wyliczyć rabaty i porównać który z nich daje największe korzyści. Zastanawiam się po prostu nad jakimś globalnym rozwiązaniem, które będzie niezależne od ilości elemenów. W sesnie - czy będzie ich jeden czy też sto :)
Z góry dzięki na jakieś nakierowanie!!