Voor je staat een urne die 75 witte knikkers en 150 zwarte knikkers bevat. Daarnaast beschik je ook nog over een onuitputtelijke voorraad zwarte knikkers. Herhaal de volgende tweestapsprocedure: eerst haal je willekeurig twee knikkers uit de urne, en daarna
als beide zwart zijn, stop je er één terug en gooi je de andere weg
als de ene zwart is en de andere wit, stop je de witte terug en gooi je de zwarte weg
als beide wit zijn, gooi je ze beide weg en stop je een zwarte uit de voorraad terug
Omdat de urne na elke stap één knikker minder bevat, zal er uiteindelijk nog slechts één knikker overblijven. Welke kleur heeft deze knikker?
We stellen een urne met $$w$$ witte en $$z$$ zwarte knikkers voor als een reeks (list of tuple) die $$w$$ keer de string wit (str) bevat en $$z$$ keer de string zwart (str). De volgorde waarin de knikkers in de urne voorkomen speelt geen rol, maar door de voorstelling als een reeds hebben de knikkers wel een opgelegde volgorde waardoor we een knikker op een bepaalde positie kunnen aangeven. Gevraagd wordt.
Schrijf een functie vullen waaraan een getal $$n \in \mathbb{N}$$ (int) moet doorgegeven worden. De functie moet een urne (list) teruggeven die in totaal $$n$$ knikkers bevat. De functie moet ervoor zorgen dat elke knikker in de urne een willekeurig gekozen kleur krijgt (zwart of wit), onafhankelijk van de positie van de knikkers in de lijst (list) die de urne voorstelt.
Schrijf een functie kiezen waaraan een urne (list of tuple) met zwarte en witte knikkers moet doorgegeven worden. De functie moet een tuple met twee willekeurig gekozen natuurlijke getallen (int) teruggeven, die twee verschillende posities aanduiden in de sequentie die de urne voorstelt. Het argument dat aan de functie doorgegeven wordt, mag hierbij niet gewijzigd worden.
Schrijf een functie verwijderen waaraan drie argumenten moeten doorgegeven worden. Het derde argument stelt een urne (list) met zwarte en witte knikkers voor, en de eerste twee argumenten duiden de positie (int) van twee knikkers aan in de lijst die de urne voorstelt. De functie moet de knikkers op de twee aangegeven posities verwijderen uit de lijst die de urne voorstelt, en achteraan de lijst een nieuwe knikker toevoegen waarvan de kleur bepaald wordt door de kleur van de verwijderde knikkers zoals aangegeven in de inleiding.
Schrijf een functie laatste waaraan een urne (list of tuple) met zwarte en witte knikkers moet doorgegeven worden. De functie moet de kleur (str) teruggeven van de laatste knikker die in de urne overblijft, als de procedure wordt uitgevoerd die in de inleiding staat beschreven. Het argument dat aan de functie doorgegeven wordt, mag hierbij niet gewijzigd worden.
>>> urne = vullen(10)
>>> urne
['wit', 'wit', 'zwart', 'zwart', 'zwart', 'wit', 'wit', 'wit', 'wit', 'zwart']
>>> knikker1, knikker2 = kiezen(urne)
>>> knikker1, knikker2
(1, 9)
>>> verwijderen(knikker1, knikker2, urne)
>>> urne
['wit', 'zwart', 'zwart', 'zwart', 'wit', 'wit', 'wit', 'wit', 'wit']
>>> laatste(urne)
'zwart'