Hra pro dva hráče s jednoduchými pravidly.
Prerekvizity | Žádné |
---|---|
Náročnost přemýšlení | Střední |
Náročnost programování | Střední (podmínky) |
Na stole před oběma hráči je několik hromádek kamínků. Hráči se střídají v tazích. V každém tahu smí hráč odebrat několik kamenů (vždy alespoň jeden; maximální počet není určen) z některé hromádky (vždy pouze z jedné). Hráč, který odebere poslední kámen prohrává.
Počet hromádek není pevně dán, ani počet kamínků v jednotlivých hromádkách; velikost hromádek může být různá. Nelze se zdržet tahu (tedy neodebrat žádný kamínek). Nelze odebrat kamínky z několika hromádek najednou.
Vaším úkolem je naprogramovat strategii hráče, tedy algoritmus, který na základě informace o aktuálním počtu kamínků v jednotlivých hromádkách rozhodne, kolik kamínků ze které hromádky chce odebrat.
V modulu player.py
vytvořte funkci play()
, jejíž kostra může vypadat třeba takto:
def play(heaps): selected_heap = 0 number_of_stones = 1 return selected_heap, number_of_stones
Tento hráč hraje stále stejný tah, tedy “z první hromádky (z hromádky č. 0) odeber 1 kámen”. Tato strategie samozřejmě není optimální, a navíc se tento tah nejspíš brzy stane nevalidním. Vaším úkolem je vymyslet a implementovat chytřejší strategii a samozřejmě hrát pouze přípustné tahy.
Popis vstupů a výstupů této funkce:
Vstup | heaps | Seznam. Počty kamínků v jednotlivých hromádkách. Délka seznamu je rovna počtu hromádek. |
---|---|---|
Výstupy | selected_heap | Celé číslo. Index hromádky, z níž chcete odebrat kamínky. Hromádky jsou číslovány od 0, jak je v Pythonu zvykem. |
number_of_stones | Celé číslo. Počet kamínků, které chcete ze zvolené hromádky odebrat. |
Vrátí-li funkce např. dvojici (0, 1)
, znamená to, že si přejete odebrat 1 kamínek z první hromádky (z hromádky s indexem 0).
Vrátí-li funkce např. dvojici (3, 5)
, znamená to, že si přejete odebrat 5 kamínků ze čtvrté hromádky (hromádky s indexem 3).
Vrácený tah musí být validní, tj.
len(heaps)-1
(počet hromádek minus 1) a
Pokud tedy vaše funkce dostane aktuální stav hry popsaný seznamem [3, 0]
, pak nevalidní tahy jsou např.
(2, 1)
, protože hromádky jsou jen dvě a tento tah vyžaduje odebrání 1 kamene ze třetí hromádky,
(1, 1)
, protože ze druhé hromádky nelze odebrat žádný kámen,
(0, 0)
, protože musíte odebrat alespoň jeden kámen,
(0, 5)
, protože z první hromádky nelze odebrat 5 kamenů, když tam jsou jen 3 apod.
Odevzdejte soubor player.py
nebo ZIP archív obsahující tento soubor spolu s dalšími moduly, pokud nemáte vše v jednom Pythonovském modulu.
Hodnocení bude probíhat na základě her s různě obtížnými protihráči. Každá hra se hraje 2x, jednou začíná hráč 1, podruhé hráč 2.