Skip to content

Commit

Permalink
deploy: 3cb7556
Browse files Browse the repository at this point in the history
  • Loading branch information
misja committed Sep 9, 2024
1 parent b16abba commit 20252ad
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 58 deletions.
Binary file modified _images/NimGame.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 17 additions & 17 deletions _sources/lectures/1a_intro_programmeren.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ Het is niet verstandig om, als er een probleem opgelost moet worden, meteen te g

## Strategieën

De strategie die gebruikt kan worden om een oplossing te vinden verschilt per probleem. De ene strategie past beter dan de ander, maar wat wel handig is, is om pen en papier te gebruiken. Hier zijn er een aantal:
De strategie die gebruikt kan worden om een oplossing te vinden verschilt per probleem. De ene strategie past beter dan de andere, maar wat wel handig is, is om pen en papier te gebruiken. Hier zijn er een aantal:

1. *Teken het probleem op papier*. Dit werkt vooral als je met ruimtelijke vragen bezig bent.
2. *Maak het probleem kleiner*. Bijvoorbeeld: wordt er gevraagd om een methode te verzinnen om getallen te sorteren? In plaats van het probleem op te lossen met 100 getallen, doe het eerst met twee getallen, daarna met drie, enz.
3. *Probeer alle opties uit*. Deze leent zich vooral als er niet teveel verschillende inputs zijn.
3. *Probeer alle opties uit*. Deze leent zich vooral als er niet te veel verschillende beginsituaties zijn.

### Longest Common Subsequence (LCS)

Het string-matching probleem in DND:
Het string-matching probleem in DNA:

- 'CGCTGAGCTAGGCC...'
- 'ATCCTAGGTAACTG...' (en $10^9$ meer!)
Expand All @@ -46,7 +46,7 @@ Beslissingsbomen (*behavior trees*) kunnen gebruikt worden om instructies te vis

![Beslisboom](images/1/beslisboom.gif)

Dit is het algoritme van Euclides wat gebruikt kan worden om de grootste gemene deler tussen twee getallen te bepalen. Euclides had ontdekt dat via een paar instructies altijd te berekenen is:
Dit is het algoritme van Euclides wat gebruikt kan worden om de grootste gemene deler (ggd) tussen twee getallen te bepalen. Euclides had ontdekt dat via een paar instructies altijd te berekenen is:

1. Noem het grootste van de beide getallen *m*, het andere *n*.
2. Deel *m* door *n*, bereken hoeveel je overhoudt en noem dat *r*.
Expand Down Expand Up @@ -74,13 +74,13 @@ Nu is de rest 0, en daarmee zijn we aan het einde gekomen. We hebben bepaald dat

## State Machine

Een andere methode voor het ontwerpen van programma's is het gebruik van een state machine. Deze manier leent zich er vooral voor om een probleem in kleinere problemen op te breken. Een state machine bestaat uit verschillende states (een staat, of situatie) en heeft altijd een *begin* en *eind* state. Tussen de states zijn overgangen die aangeven wanneer er van state verandert wordt.
Een andere methode voor het ontwerpen van programma's is het gebruik van een state machine. Deze manier leent zich er vooral voor om een probleem in kleinere problemen op te breken. Een state machine bestaat uit verschillende states (een staat, of situatie) en heeft altijd een *begin* en *eind* state. Tussen de states zijn overgangen die aangeven wanneer er van state veranderd wordt.

Neem bijvoorbeeld de spoken van Pac-Man. Zodra het spel begint zoeken ze naar Pac-Man en als ze hem zien gaan ze achter hem aan. Als Pac-Man een Power Pellet pakt moeten de spoken juist vluchten. Dit idee kan afgebeeld worden in een state machine.

![State Machine](images/1/pacmanStates.png)

Na het ontwerpen van een de state machine kan er nagedacht worden over hoe de afzonderlijke problemen opgelost kunnen worden en dit kan weer gedaan worden met een beslissingsboom.
Na het ontwerpen van de state machine kan er nagedacht worden over hoe de afzonderlijke problemen opgelost kunnen worden en dit kan weer gedaan worden met een beslissingsboom.

## 3 p's

Expand All @@ -93,26 +93,26 @@ De drie p's van het programmeren:

Deze opdrachten zijn ontworpen om je te helpen denken als een informaticus. Door strategieën te ontwikkelen voor deze spellen, oefen je met het soort probleemoplossend denken dat essentieel is in de informatica.

### Opdracht 1 : Nim
### Opdracht 1: Nim

![Nim 16 lucifers](images/1/NimGame.png)

Nim is een spel voor twee spelers. Er liggen 16 lucifers op tafel. Om de beurt pakt een speler 1, 2 of 3 lucifers. Degene die de laatste lucifer van tafel pakt heeft gewonnen. Als de speler die als tweede begint de juiste strategie gebruikt kan hij/zij altijd winnen.
Nim is een spel voor twee spelers. Er liggen 16 lucifers op tafel. Om de beurt pakt een speler 1, 2 of 3 lucifers. Degene die de laatste lucifer van tafel pakt heeft gewonnen. Als de speler die als tweede begint de juiste strategie gebruikt, kan hij/zij altijd winnen.

- **Stap 1: Proberen.** Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen.
- **Stap 2: Plan.** Maak een beslissingsboom voor speler 2.
- **Stap 1: Proberen.** Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen. Speel het spel een paar keer tegen jezelf of een medestudent om patronen te ontdekken.
- **Stap 2: Plan.** Maak een beslissingsboom voor speler 2. Begin bij de startsituatie en werk alle mogelijke zetten uit tot je de winnende strategie ziet.

### Opdracht 2 : Nim variant
### Opdracht 2: Nim variant

Leg 3 groepjes lucifers op tafel. Hoeveel lucifers er in elke groep ligt, dat maakt niet uit. Om de beurt pakt een speler 1, 2 of 3 lucifers **uit dezelfde groep**. Degene die de laatste lucifer van tafel pakt heeft gewonnen. Ook nu kan met de juiste strategie speler 2 altijd winnen.
Leg 3 groepjes lucifers op tafel. Het aantal lucifers in elke groep maakt niet uit. Om de beurt pakt een speler 1, 2 of 3 lucifers **uit dezelfde groep**. Degene die de laatste lucifer van tafel pakt heeft gewonnen. Ook nu kan met de juiste strategie speler 2 altijd winnen.

- **Stap 1: Proberen.** Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen.
- **Stap 2: Plan.** Maak een beslissingsboom voor speler 2.
- **Stap 1: Proberen.** Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen. Begin met een eenvoudige opstelling, bijvoorbeeld (3,4,5) lucifers in de groepen.
- **Stap 2: Plan.** Maak een beslissingsboom voor speler 2. Beschrijf de winnende strategie in algemene termen, zodat deze voor elke beginopstelling werkt.

### Opdracht 3: SOS

SOS is ook een spel voor twee spelers. Het speelveld is een rij van 100 vakjes. Om de beurt plaatst een speler de letter 'S' of de letter "O" in een vakje. De spelers kiezen zelf welk vakje en welke letter. Het spel is voorbij zodra er 'SOS' gespeld is op het bord. Wie de laatste letter heeft neergezet wint, ongeacht wie de andere twee letters van het woord 'SOS' heeft geplaatst.
SOS is ook een spel voor twee spelers. Het speelveld is een rij van 100 vakjes. Om de beurt plaatst een speler de letter 'S' of de letter 'O' in een vakje. De spelers kiezen zelf welk vakje en welke letter. Het spel is voorbij zodra er 'SOS' gespeld is op het bord. Wie de laatste letter heeft neergezet wint, ongeacht wie de andere twee letters van het woord 'SOS' heeft geplaatst.
Ook hier geldt dat speler 2 met de juiste strategie altijd wint.

- **Stap 1: Proberen.** Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen.
- **Stap 2: Plan.** Maak een beslissingsboom voor speler 2.
- **Stap 1: Proberen.** Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen. Begin met een kleiner speelveld, bijvoorbeeld 10 vakjes, om het probleem behapbaar te maken.
- **Stap 2: Plan.** Maak een beslissingsboom voor speler 2. Beschrijf de strategie in termen van hoe speler 2 moet reageren op de zetten van speler 1 om altijd te winnen.
42 changes: 21 additions & 21 deletions lectures/1a_intro_programmeren.html
Original file line number Diff line number Diff line change
Expand Up @@ -592,8 +592,8 @@ <h2> Inhoud </h2>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#state-machine">State Machine</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#p-s">3 p’s</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#opdrachten">Opdrachten</a><ul class="nav section-nav flex-column">
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#opdracht-1-nim">Opdracht 1 : Nim</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#opdracht-2-nim-variant">Opdracht 2 : Nim variant</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#opdracht-1-nim">Opdracht 1: Nim</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#opdracht-2-nim-variant">Opdracht 2: Nim variant</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#opdracht-3-sos">Opdracht 3: SOS</a></li>
</ul>
</li>
Expand Down Expand Up @@ -623,15 +623,15 @@ <h2>Hoe kan een probleem worden opgelost?<a class="headerlink" href="#hoe-kan-ee
</section>
<section id="strategieen">
<h2>Strategieën<a class="headerlink" href="#strategieen" title="Link to this heading">#</a></h2>
<p>De strategie die gebruikt kan worden om een oplossing te vinden verschilt per probleem. De ene strategie past beter dan de ander, maar wat wel handig is, is om pen en papier te gebruiken. Hier zijn er een aantal:</p>
<p>De strategie die gebruikt kan worden om een oplossing te vinden verschilt per probleem. De ene strategie past beter dan de andere, maar wat wel handig is, is om pen en papier te gebruiken. Hier zijn er een aantal:</p>
<ol class="arabic simple">
<li><p><em>Teken het probleem op papier</em>. Dit werkt vooral als je met ruimtelijke vragen bezig bent.</p></li>
<li><p><em>Maak het probleem kleiner</em>. Bijvoorbeeld: wordt er gevraagd om een methode te verzinnen om getallen te sorteren? In plaats van het probleem op te lossen met 100 getallen, doe het eerst met twee getallen, daarna met drie, enz.</p></li>
<li><p><em>Probeer alle opties uit</em>. Deze leent zich vooral als er niet teveel verschillende inputs zijn.</p></li>
<li><p><em>Probeer alle opties uit</em>. Deze leent zich vooral als er niet te veel verschillende beginsituaties zijn.</p></li>
</ol>
<section id="longest-common-subsequence-lcs">
<h3>Longest Common Subsequence (LCS)<a class="headerlink" href="#longest-common-subsequence-lcs" title="Link to this heading">#</a></h3>
<p>Het string-matching probleem in DND:</p>
<p>Het string-matching probleem in DNA:</p>
<ul class="simple">
<li><p>‘CGCTGAGCTAGGCC…’</p></li>
<li><p>‘ATCCTAGGTAACTG…’ (en <span class="math notranslate nohighlight">\(10^9\)</span> meer!)</p></li>
Expand All @@ -651,7 +651,7 @@ <h3>Longest Common Subsequence (LCS)<a class="headerlink" href="#longest-common-
<h2>Beslissingsboom<a class="headerlink" href="#beslissingsboom" title="Link to this heading">#</a></h2>
<p>Beslissingsbomen (<em>behavior trees</em>) kunnen gebruikt worden om instructies te visualiseren. Het is een vorm die je misschien wel herkent.</p>
<p><img alt="Beslisboom" src="../_images/beslisboom.gif" /></p>
<p>Dit is het algoritme van Euclides wat gebruikt kan worden om de grootste gemene deler tussen twee getallen te bepalen. Euclides had ontdekt dat via een paar instructies altijd te berekenen is:</p>
<p>Dit is het algoritme van Euclides wat gebruikt kan worden om de grootste gemene deler (ggd) tussen twee getallen te bepalen. Euclides had ontdekt dat via een paar instructies altijd te berekenen is:</p>
<ol class="arabic simple">
<li><p>Noem het grootste van de beide getallen <em>m</em>, het andere <em>n</em>.</p></li>
<li><p>Deel <em>m</em> door <em>n</em>, bereken hoeveel je overhoudt en noem dat <em>r</em>.</p></li>
Expand All @@ -671,10 +671,10 @@ <h2>Beslissingsboom<a class="headerlink" href="#beslissingsboom" title="Link to
</section>
<section id="state-machine">
<h2>State Machine<a class="headerlink" href="#state-machine" title="Link to this heading">#</a></h2>
<p>Een andere methode voor het ontwerpen van programma’s is het gebruik van een state machine. Deze manier leent zich er vooral voor om een probleem in kleinere problemen op te breken. Een state machine bestaat uit verschillende states (een staat, of situatie) en heeft altijd een <em>begin</em> en <em>eind</em> state. Tussen de states zijn overgangen die aangeven wanneer er van state verandert wordt.</p>
<p>Een andere methode voor het ontwerpen van programma’s is het gebruik van een state machine. Deze manier leent zich er vooral voor om een probleem in kleinere problemen op te breken. Een state machine bestaat uit verschillende states (een staat, of situatie) en heeft altijd een <em>begin</em> en <em>eind</em> state. Tussen de states zijn overgangen die aangeven wanneer er van state veranderd wordt.</p>
<p>Neem bijvoorbeeld de spoken van Pac-Man. Zodra het spel begint zoeken ze naar Pac-Man en als ze hem zien gaan ze achter hem aan. Als Pac-Man een Power Pellet pakt moeten de spoken juist vluchten. Dit idee kan afgebeeld worden in een state machine.</p>
<p><img alt="State Machine" src="../_images/pacmanStates.png" /></p>
<p>Na het ontwerpen van een de state machine kan er nagedacht worden over hoe de afzonderlijke problemen opgelost kunnen worden en dit kan weer gedaan worden met een beslissingsboom.</p>
<p>Na het ontwerpen van de state machine kan er nagedacht worden over hoe de afzonderlijke problemen opgelost kunnen worden en dit kan weer gedaan worden met een beslissingsboom.</p>
</section>
<section id="p-s">
<h2>3 p’s<a class="headerlink" href="#p-s" title="Link to this heading">#</a></h2>
Expand All @@ -689,29 +689,29 @@ <h2>3 p’s<a class="headerlink" href="#p-s" title="Link to this heading">#</a><
<h2>Opdrachten<a class="headerlink" href="#opdrachten" title="Link to this heading">#</a></h2>
<p>Deze opdrachten zijn ontworpen om je te helpen denken als een informaticus. Door strategieën te ontwikkelen voor deze spellen, oefen je met het soort probleemoplossend denken dat essentieel is in de informatica.</p>
<section id="opdracht-1-nim">
<h3>Opdracht 1 : Nim<a class="headerlink" href="#opdracht-1-nim" title="Link to this heading">#</a></h3>
<h3>Opdracht 1: Nim<a class="headerlink" href="#opdracht-1-nim" title="Link to this heading">#</a></h3>
<p><img alt="Nim 16 lucifers" src="../_images/NimGame.png" /></p>
<p>Nim is een spel voor twee spelers. Er liggen 16 lucifers op tafel. Om de beurt pakt een speler 1, 2 of 3 lucifers. Degene die de laatste lucifer van tafel pakt heeft gewonnen. Als de speler die als tweede begint de juiste strategie gebruikt kan hij/zij altijd winnen.</p>
<p>Nim is een spel voor twee spelers. Er liggen 16 lucifers op tafel. Om de beurt pakt een speler 1, 2 of 3 lucifers. Degene die de laatste lucifer van tafel pakt heeft gewonnen. Als de speler die als tweede begint de juiste strategie gebruikt, kan hij/zij altijd winnen.</p>
<ul class="simple">
<li><p><strong>Stap 1: Proberen.</strong> Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen.</p></li>
<li><p><strong>Stap 2: Plan.</strong> Maak een beslissingsboom voor speler 2.</p></li>
<li><p><strong>Stap 1: Proberen.</strong> Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen. Speel het spel een paar keer tegen jezelf of een medestudent om patronen te ontdekken.</p></li>
<li><p><strong>Stap 2: Plan.</strong> Maak een beslissingsboom voor speler 2. Begin bij de startsituatie en werk alle mogelijke zetten uit tot je de winnende strategie ziet.</p></li>
</ul>
</section>
<section id="opdracht-2-nim-variant">
<h3>Opdracht 2 : Nim variant<a class="headerlink" href="#opdracht-2-nim-variant" title="Link to this heading">#</a></h3>
<p>Leg 3 groepjes lucifers op tafel. Hoeveel lucifers er in elke groep ligt, dat maakt niet uit. Om de beurt pakt een speler 1, 2 of 3 lucifers <strong>uit dezelfde groep</strong>. Degene die de laatste lucifer van tafel pakt heeft gewonnen. Ook nu kan met de juiste strategie speler 2 altijd winnen.</p>
<h3>Opdracht 2: Nim variant<a class="headerlink" href="#opdracht-2-nim-variant" title="Link to this heading">#</a></h3>
<p>Leg 3 groepjes lucifers op tafel. Het aantal lucifers in elke groep maakt niet uit. Om de beurt pakt een speler 1, 2 of 3 lucifers <strong>uit dezelfde groep</strong>. Degene die de laatste lucifer van tafel pakt heeft gewonnen. Ook nu kan met de juiste strategie speler 2 altijd winnen.</p>
<ul class="simple">
<li><p><strong>Stap 1: Proberen.</strong> Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen.</p></li>
<li><p><strong>Stap 2: Plan.</strong> Maak een beslissingsboom voor speler 2.</p></li>
<li><p><strong>Stap 1: Proberen.</strong> Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen. Begin met een eenvoudige opstelling, bijvoorbeeld (3,4,5) lucifers in de groepen.</p></li>
<li><p><strong>Stap 2: Plan.</strong> Maak een beslissingsboom voor speler 2. Beschrijf de winnende strategie in algemene termen, zodat deze voor elke beginopstelling werkt.</p></li>
</ul>
</section>
<section id="opdracht-3-sos">
<h3>Opdracht 3: SOS<a class="headerlink" href="#opdracht-3-sos" title="Link to this heading">#</a></h3>
<p>SOS is ook een spel voor twee spelers. Het speelveld is een rij van 100 vakjes. Om de beurt plaatst een speler de letter ‘S’ of de letter “O” in een vakje. De spelers kiezen zelf welk vakje en welke letter. Het spel is voorbij zodra er ‘SOS’ gespeld is op het bord. Wie de laatste letter heeft neergezet wint, ongeacht wie de andere twee letters van het woord ‘SOS’ heeft geplaatst.
<p>SOS is ook een spel voor twee spelers. Het speelveld is een rij van 100 vakjes. Om de beurt plaatst een speler de letter ‘S’ of de letter ‘O’ in een vakje. De spelers kiezen zelf welk vakje en welke letter. Het spel is voorbij zodra er ‘SOS’ gespeld is op het bord. Wie de laatste letter heeft neergezet wint, ongeacht wie de andere twee letters van het woord ‘SOS’ heeft geplaatst.
Ook hier geldt dat speler 2 met de juiste strategie altijd wint.</p>
<ul class="simple">
<li><p><strong>Stap 1: Proberen.</strong> Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen.</p></li>
<li><p><strong>Stap 2: Plan.</strong> Maak een beslissingsboom voor speler 2.</p></li>
<li><p><strong>Stap 1: Proberen.</strong> Ga uitzoeken welke strategie speler 2 moet gebruiken om altijd te winnen. Begin met een kleiner speelveld, bijvoorbeeld 10 vakjes, om het probleem behapbaar te maken.</p></li>
<li><p><strong>Stap 2: Plan.</strong> Maak een beslissingsboom voor speler 2. Beschrijf de strategie in termen van hoe speler 2 moet reageren op de zetten van speler 1 om altijd te winnen.</p></li>
</ul>
</section>
</section>
Expand Down Expand Up @@ -790,8 +790,8 @@ <h3>Opdracht 3: SOS<a class="headerlink" href="#opdracht-3-sos" title="Link to t
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#state-machine">State Machine</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#p-s">3 p’s</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#opdrachten">Opdrachten</a><ul class="nav section-nav flex-column">
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#opdracht-1-nim">Opdracht 1 : Nim</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#opdracht-2-nim-variant">Opdracht 2 : Nim variant</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#opdracht-1-nim">Opdracht 1: Nim</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#opdracht-2-nim-variant">Opdracht 2: Nim variant</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#opdracht-3-sos">Opdracht 3: SOS</a></li>
</ul>
</li>
Expand Down
2 changes: 0 additions & 2 deletions lectures/4a_lussen.html
Original file line number Diff line number Diff line change
Expand Up @@ -1039,8 +1039,6 @@ <h3>Ontsnappen<a class="headerlink" href="#ontsnappen" title="Link to this headi
<div class="cell_output docutils container">
<div class="output stream highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span>Help! Let me out!
Help! Let me out!
Help! Let me out!
Help! Let me out!
At last!
</pre></div>
</div>
Expand Down
Loading

0 comments on commit 20252ad

Please sign in to comment.