De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Nim, een strategisch spelletje

Verwante presentaties


Presentatie over: "Nim, een strategisch spelletje"— Transcript van de presentatie:

1 Nim, een strategisch spelletje
Bert Wikkerink

2 Wat gaan we doen:  Spelletje onderzoeken  Oplossingsstrategie zoeken
 Hoe zit dat met de wiskunde? Programmeren Maar eerst …

3 Het spel Begin met een willekeurig aantal stenen
Twee spelers pakken om de beurt stenen weg De speler die de laatste steen (stenen) pakt wint het spel Het spel Twee extra regels:  De speler die begint mag niet alle stenen pakken in zijn eerste beurt Een speler mag niet meer dan het dubbele van het aantal pakken dat de speler voor hem pakte

4 Zoeken naar een strategie
A begint en de winnaar is … 3 4 5 6 7 8 9 10 11 12 13 14 Winnaar (A or B) B A B A A B A A A A B A

5 Het lijkt erop dat speler A verliest als hij/zij moet beginnen met een van de volgende aantallen:
1 1 2 3 5 8 13 21 34 De rij van Fibonacci Leonardo van Pisa (Fibonacci) c – c. 1250

6 We weten dat de beginspeler verliest als hij/zij moet beginnen met een van de Fibonacci getallen 2, 3, 5, 8. Maar hoe zit dat met 13? 8 5

7 We weten dat de beginspeler verliest als hij/zij moet beginnen met een van de Fibonacci getallen 2, 3, 5, 8. Maar hoe zit dat met 13? en met 21? 13 8

8 En wat als het een niet-Fibonacci getal is?

9 En wat als het een niet-Fibonacci getal is?
7

10 En wat als het een niet-Fibonacci getal is?
7 =

11 En wat als het een niet-Fibonacci getal is?
12

12 En wat als het een niet-Fibonacci getal is?
12 =

13 En wat als het een niet-Fibonacci getal is?
12 =

14 En wat als het een niet-Fibonacci getal is?
20

15 En wat als het een niet-Fibonacci getal is?
20 =

16 En wat als het een niet-Fibonacci getal is?
20 =

17 Stelling van Zeckendorf:
Elk positief geheel getal is te schrijven als de som van niet opeenvolgende Fibonacci getallen. Gevolg: Als je mag beginnen met een niet-Fibonacci getal is er altijd een zet die tot winst leidt. Je pakt gewoon het kleinste getal uit de Fibonacci-representatie.

18 Programmeren van de TI-Nspire
Het programma functies factoriseer(n) fib(a) Schrijf n als som van Fibonacci getallen Bereken het grootste Fibonacci getal ≤ a

19 Twee functies: 1 fib(a): grootste Fibonacci getal ≤ a Voorbeelden: fib(11) = 8 fib(19) = 13 fib(30) = 21

20 Twee functies: 2 factorize(n): Fibonacci representatie van n Voorbeelden: factoriseer(11) = { 8, 3 } factoriseer(19) = { 13, 5, 2 } factoriseer(30) = { 21, 8, 1 }

21 {1,1} 1 > 6 ? {1,2} 2 > 6 ? {2,3} 3 > 6 ? {3,5} 5 > 6 ?
1 Hoe vind je het grootste Fibonacci getal ≤ 6 {1,1} 1 > 6 ? {1,2} 2 > 6 ? {2,3} 3 > 6 ? {3,5} 5 > 6 ? {5,8} 8 > 6 ? Return 5

22 lijst:={lijst[2],lijst[1]+lijst[2]} EndLoop
Define fib(a)= Func  © Bereken het grootste Fibonacci getal ≤ a Local lijst © Variabele alleen binnen deze functie lijst:={1,1} © Eerste twee Fibonacci getallen Loop If lijst[2]>a: Exit lijst:={lijst[2],lijst[1]+lijst[2]} EndLoop © Bereken het volgende Fibonacci getal totdat > a Return lijst[1] © list[1] is het gezochte getal EndFunc

23 Define factoriseer(a)= Func
© Geef de Fibonacci representatie van a Local n,lijst © Variabelen binnen deze functioe lijst:={} © Start met een lege lijst While a>0 n:=fib(a) lijst:=augment({n},lijst) a:=a-n EndWhile © Zoek het grootste Fibonacci getal ≤ a en doe hetzelfde met de rest etc Return lijst © klaar EndFunc

24 Define start()= Prgm  Local n,mx,zet,a,f,nspire n:=0 While n<3 Request "Starting number",n,0 If n=0: Stop If n<3: Text "Minimum 3",0 EndWhile . . . EndPrgm

25 Define start()= Prgm  . . . nspire:=false a:=0 While a<1 or a>2 Request "1=Nspire begins, 2=You begin",a,0 If a=0: Stop EndWhile If a=1: nspire:=true . . . EndPrgm

26 mx:=n-1 Loop If nspire Then f:=factoriseer(n) zet:=f[1] If zet>mx: move:=1 Text "There are "&string(n)&". I take "&string(zet) Else zet:=0 While zet<1 or zet>mx Request "There are “&string(n)&". You take? (max "&string(mx)&")",zet If zet=0: Stop EndWhile EndIf n:=n-zet If n≤0: Exit nspire:=not nspire mx:=2*zet EndLoop

27 mx:=n-1 Loop If nspire Then f:=factorize(n) zet:=f[1] If zet>mx: zet:=1 Text "There are "&string(n)&". I take "&string(zet) Else zet:=0 While zet<1 or zet>mx Request "There are “&string(n)&". You take? (max "&string(mx)&")", zet If zet=0: Stop EndWhile EndIf n:=n-zet If n≤0: Exit nspire:=not nspire mx:=2*zet EndLoop

28 mx:=n-1 Loop If nspire Then f:=factorize(n) zet:=f[1] If zet>mx: zet:=1 Text "There are "&string(n)&". I take "&string(zet) Else zet:=0 While zet<1 or zet>mx Request "There are “&string(n)&". You take? (max "&string(mx)&")",zet If zet=0: Stop EndWhile EndIf n:=n-zet If n≤0: Exit nspire:=not nspire mx:=2*zet EndLoop

29 mx:=n-1 Loop If nspire Then f:=factorize(n) zet:=f[1] If zet>mx: zet:=1 Text "There are "&string(n)&". I take "&string(zet) Else zet:=0 While zet<1 or zet>mx Request "There are “&string(n)&". You take? (max "&string(mx)&")",zet If zet=0: Stop EndWhile EndIf n:=n-zet If n≤0: Exit nspire:=not nspire mx:=2*zet EndLoop

30 Define start()= Prgm  . . . If nspire Then Text " Ik heb gewonnen ",0 Else Text ”Jij hebt gewonnen",0 EndIf EndPrgm

31 Extra

32 Einde

33

34

35

36 3 1 2 4 5 6 7 8

37 Programming a strategy game Bert Wikkerink


Download ppt "Nim, een strategisch spelletje"

Verwante presentaties


Ads door Google