Het spel "Lucifers" wordt volgens volgende regels gespeeld:
- Bij aanvang van het spel liggen $$N$$ lucifers op tafel
- 2 spelers nemen om beurten een aantal lucifers, dit aantal is minstens 1 en hoogstens M
- de speler die gedwongen wordt de laatste lucifer te nemen, verliest
- een speler die meer dan $$M$$ lucifers neemt, verliest ook
Schrijf een functie $$\verb!lucifers()!$$ met volgende argumenten :
- de functie $$f()$$ met 2 argumenten, namelijk het aantal lucifers dat momenteel op tafel ligt, en de grootheid $$M$$.
Deze functie beschrijft de strategie van de startspeler, en geeft als resultaat het aantal genomen lucifers
- de functie $$g()$$, met dezelfde argumenten, die de strategie van de tweede speler beschrijft en opnieuw het aantal genomen lucifers teruggeeft
- het aantal lucifers bij aanvang van het spel $$N > 1$$
- het maximaal aantal lucifers dat mag genomen worden ($$M$$)
Deze functie levert 2 objecten als resultaat, namelijk:
- een lijst die aangeeft hoeveel lucifers VOOR elke beurt op tafel liggen (de lijst start
start dus met de waarde $$N$$
- een geheel getal dat aangeeft welke speler wint, 0 geeft aan dat de startspeler wint, 1 geeft aan
dat de tweede speler wint.
Merk op: de functies $$f()$$ en $$g()$$ hoef je niet zelf te programmeren (om te testen kan je functies
uit het voorbeeld gebruiken.)
Argumenten
Vier argumenten, namelijk 2 strategiefuncties, en de grootheden $$N$$ en $$M$$.
Resultaat
Een lijst met het aantal lucifers VOOR elke beurt, en de speler die wint.
Voorbeeld
def f(n, M):
return min(n, M)
def g(n, M):
return max(n%M, 1)
lucifers(f, g, 23, 7) = ([23, 16, 14, 7, 6], 1)
lucifers(f, f, 23, 7) = ([23, 16, 9, 2], 0)
lucifers(g, g, 23, 7) = ([23, 21, 20, 14, 13, 7, 6], 1)