Tłusty Python z pączkami i algorytmami

python problem plecakowy

Tytuł absurdalny, wszystko dla was, ponieważ zadań z algorytmów nigdy dość! Z okazji Tłustego Czwartku łapcie tematyczne zadanka do rozwiązania jak zwykle w Pythonie (lub dowolnie innym języku programowania).

Wysiłek umysłowy spala kalorie, także po wszystkim możecie się sowicie nagrodzić tłustym pączkiem!

Pączek, kawa i kod… a Python poleca się każdego dnia! 😉

Zadanie 1 – teoria

Chcesz zjeść jak najwięcej pączków w Tłusty Czwartek. Niestety, doświadczenie z poprzednich lat mówi Ci, że pół kilo pączków to maksymalna objętość Twojego żołądka, więc nie masz szans zjeść wszystkich smaków. Twój cel to zjeść jak najwięcej kalorii (wg zasady najpierw masa, potem rzeźba 😉 ), dlatego przed wyborem smaków analizujesz ich wagę i wartość kaloryczną, aby najeść się do syta.

Na stole czekają na ciebie pączki w różnych smakach:

  • pączek wiśniowy ok. 100g (252 kcal)
  • fit pączek gryczany ze śliwkami ok. 200g (205 kcal)
  • pączek z czekoladą ok. 150 g (315 kcal)
  • pączek z karmelowo-orzechowy ok. 100 g (441 kcal)
  • oreo donut ok. 150 (630 kcal)
  • mini pączek z budyniem 50g (126kcal)

Dla ułatwienia pączki numerujesz od 0 do 5 i wszystko skrupulatnie zapisujesz w tabeli

nr pączka (i) 0 1 2 3 4 5
waga pączka (wi) 100 200 150 100 150 50
wartość kcal(vi) 252 205 315 441 630 126

Które pączki musisz zjeść, aby wartość kaloryczna była jak największa?
Zadanie rozwiązać możesz na kartce tworząc tablicę problemu.

(podpowiedź: wykorzystaj programowanie dynamiczne)

Zadanie 2 – python: programowanie dynamiczne, problem plecakowy

Nie będziesz przecież co roku liczyć kalorii na kartce! Wystarczy ten problem zapisać jako decyzyjny inaczej zero-jedynkowy problem plecakowy (0-1 Knapsack Problem). Stwórz program implementujący algorytm programowania dynamicznego (dla chętnych: algorytm zachłanny).

  • Pozwól użytkownikowi wprowadzić indywidualną pojemność żołądka (C) oraz elementy — pączki (z wagą i wartością energetyczną) z klawiatury.
  • Pozwól użytkownikowi wczytać dane z pliku. Format powinien być zdefiniowany i wyjaśniony na wstępie.
  • Program powinien być odporny na podstawowe błędy (np. wczytanie danych o złym typie np. kalorie podane jako string).

Przetestuj swój program ręcznie lub napisz generator pączków.

Dla chętnych: porównaj czas działania algorytmu zachłannego i dynamicznego (porównaj tylko działanie algorytmów bez czasy wczytania danych czy wyświetlenia danych).

Fakt, że tu jesteście sprawia, że jesteście chętni prawda?

Autorka ilustracji – Jagoda Wielbacka (artneko.pl)
python snake loves donuts ❤