Nim, een strategisch spelletje

Slides:



Advertisements
Verwante presentaties

Advertisements


Binnen / Buitenkring Maak een binnen- en buitenkring
PSD Basisstructuren programmeren.

Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Atari ! Ik speel KO, als je niets doet heb je nog maar één oog. Amai ! Ik ben dood. Ik gooi deze steen dan maar in dat kost je een hele groep Ik splits.
Een paar programma’s met een aantal basisprincipes.
Uitwerking tentamen Functioneel Programmeren 29 januari 2009.
Practica Computerlinguistiek Tekst en uitleg:
Excel, zin in een potje Zeeslag?
Afspraken en regels.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.
Wiskunde D op de UvT Herbert Hamers.

Fibonacci & Friends Met dank aan Gerard Tel.
Programmerend denken Algoritmen.
Meer perspectief Welkom Masterclass – Speel jij een spelletje? René Bekker Bijeenkomst 2 – Nim Tijdstip: vrijdag 13 maart :00-18:00 Locatie: C6.68.
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
Mario party is een spellen reeks, er komen steeds nieuwe. Mario party is een soort monopoly met spellen. Je speelt het met 2 of 4 spelers. Het doel van.
1 Datastructuren Skiplists. 2 Skiplists  Vrij eenvoudige datastructuur  “Makkelijker” dan gebalanceerde bomen  Kunnen hetzelfde als gebalanceerde bomen.
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
Datastructuren Sorteren, zoeken en tijdsanalyse
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
Mens erger je niet! Amersfoort, 9 oktober Deze workshop De aanleiding De eerste les voor de leerlingen Het vervolg Aandacht voor gebruik van de.
Eindwerk Kunstmatige intelligentie Door Nick, Tess, Dieter.
Russische roulette Live or die. 7 delen Startmenu Inzet Aantal kogels Het schot While - functie Opnieuw ja/nee High score.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
WERKWOORDSPELLING Hoe doe je dat ?.
AWK A Pattern scanning and processing language made by Aho Weinberger Kernighan and explained by Albert Montijn.
Torens van Hanoi ● Uitgevonden door Franse Wiskundige Edouard Lucas in ● Beschreven in zijn wiskundig “spelletjesboek” Récréations Mathématiques.
Allard Kamphuisen Hado van Hasselt Wilco Broeders
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Een embedded systeem: ARM bord.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Gecijferdheid les 1.4 Grootst gemene deler Kleinst gemene veelvoud
Programmeren met kinderen NWT-conferentie basisonderwijs SPANNING & SENSATIE.
Agenda  Lesuur minuten  Wat kun je met programmeren?  Wat is code en hoe werkt het?  Code schrijven: de basis  Lesuur minuten  Zelf.
Uitleg  In dit spel is het de bedoeling dat je zoveel mogelijk punten verzamelt door vragen goed te beantwoorden.  In ronde 2, 3 en 4 staat er ook een.
DKA4-model In 4 stappen naar het antwoord.. DKA4-model. Delen, keer antwoord op het 4 e getal. Teken een tabel De getallen die bij elkaar horen, onder.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Uitleg  In dit spel is het de bedoeling dat je zoveel mogelijk punten verzamelt door vragen goed te beantwoorden.  In ronde 2, 3 en 4 staat er ook een.
Rekenbingo Negatieve getallen
Recursie in de wiskunde
6.4 Gemiddelde, mediaan en modus Centrummaten
Wat is het grootste getal
Gameprogrammeren: Recursie
Significante cijfers © Johan Driesse © 2013 – Johan Driesse.
TI-Nspire Powered by.
Survivor Steven, Jurgen, Raphael, Samuel, Willem
Small Basic Console deel 2
Zeeslag Bron: csunplugged.org / csunplugged.nl.
Wetenschappelijk en significantie
Steen-schaar-papier Bron:
Wat gaan we doen? Herhaling ARM assembler instructies
Small Basic Console deel 2
Atari ! Amai ! Ik ben dood. Ik gooi deze steen in, dat kost je zo een
SQL Les February 2019.
TI-Nspire.
Tellen met kaarten.
Tellen met kaarten.
GGD en KGV.
Gameprogrammeren: Arrays
Je maakt kennis met grote getallen.
Breuken optellen en aftrekken
Python – For loop + strings
Python – For loop + strings
Transcript van de presentatie:

Nim, een strategisch spelletje Bert Wikkerink b.wikkerink@csgliudger.nl

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

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

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

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. 1175 – c. 1250

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

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

En wat als het een niet-Fibonacci getal is?

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

En wat als het een niet-Fibonacci getal is? 7 = 5 + 2

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

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

En wat als het een niet-Fibonacci getal is? 12 = 8 + 3 + 1

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

En wat als het een niet-Fibonacci getal is? 20 = 13 + 7

En wat als het een niet-Fibonacci getal is? 20 = 13 + 5 + 2

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.

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

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

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

{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

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

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

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

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

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

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

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

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

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

Extra

Einde b.wikkerink@csgliudger.nl

3 1 2 4 5 6 7 8

Programming a strategy game Bert Wikkerink b.wikkerink@csgliudger.nl