Dobbelstenen vakantie-uitdaging

Dobbelstenen vakantie-uitdaging

[oOO]

In het laatste nummer voor de vakantie stelde onze Python redacteur een uitdaging op. In dit artikel lees je de uitslag.

De opdracht luidde:

Stel je het volgende spel voor: Je hebt $4$ dobbelstenen en een pak kaartjes met daarop de getallen $1$ t/m $100$. Het spel gaat als volgt: je trekt een kaartje met een getal (zeg $N$). Je gooit vervolgens met de $4$ dobbelstenen. Zeg je gooit $a$, $b$, $c$ en $d$. Nu is het de bedoeling om met de getallen $a$, $b$, $c$ en $d$ met gebruikmaking van de operaties optellen, aftrekken, vermenigvuldigen en delen het getal $N$ te bereiken. We spreken over het maken van $N$ als we de bovenstaande werkwijze bedoelen. 

In plaats van dobbelstenen met 1 t/m 6 kun je ook kiezen voor andere dobbelstenen. We stellen enkele eisen aan de door jou ontworpen dobbelstenen. 

  1. Alle 6 getallen zijn positief en geheel. 
  2. Geen twee getallen op één dobbelsteen zijn gelijk.

Voor welke set van $4$ dobbelstenen heb je de grootste kans om het spel tot een goed einde te brengen?

De inzendingen

Er waren drie voortreffelijke inzendingen. We lopen eerst snel de oplossingen langs. 

Lance Bakker stuurde als oplossingen de volgende 4 dobbelstenen:

Dobbelsteen 1 = (2, 3, 4, 5, 6, 7)
Dobbelsteen 2 = (2, 3, 4, 5, 6, 10)
Dobbelsteen 3 = (2, 3, 4, 5, 7, 8)
Dobbelsteen 4 = (9, 11, 12, 13, 14, 15)

Lance vereenvoudigt de berekening door niet alle combinaties van getallen, haakjes en operaties uit te voeren, maar slechts een essentiële deelverzameling. Zo reduceert hij de berekening van 11 minuten tot 0,72 seconden per set van $4$ dobbelstenen. Hij onderzocht onder meer wat er gebeurde als één van de dobbelstenen werd aangepast.

Daan de Groot zond ons deze 4 dobbelstenen toe:

Dobbelsteen 1 = (2, 3, 4, 5, 6, 7)
Dobbelsteen 2 = (2, 3, 4, 5, 6, 10)
Dobbelsteen 3 = (2, 3, 4, 5, 7, 8)
Dobbelsteen 4 = (11, 12, 13, 14, 15, 18)

Hij kon de code versnellen tot een snelheid van 0,7 seconden per set van 4 dobbelstenen. Maar hij kon ook een initialisatie uitvoeren in 10 minuten, waarna de berekening nog veel sneller kon worden uitgevoerd. Zijn programma kan ook werken met anderssoortige dobbelstenen, bijvoorbeeld octaëders, dodecaëders en icosaëders.

De laatste inzender was Casper de With. Hij stuurde de volgende dobbelstenen in:

Dobbelsteen 1 = (2, 3, 4, 5, 6, 7)
Dobbelsteen 2 = (2, 3, 4, 5, 6, 9)
Dobbelsteen 3 = (2, 3, 4, 5, 7, 8)
Dobbelsteen 4 = (10, 11, 12, 14, 15, 18)

Hij vond een versnelling door hardcoded in het programma alle mogelijke aantallen juiste oplossingen voor $4$ getallen $a$, $b$, $c$ en $d$ te plaatsen. Voor een set van $4$ dobbelstenen moet vervolgens $1296$ maal een zoekopdracht in de tabel worden uitgevoerd. Zodoende kostte bij Casper een berekening in de orde van 2 milliseconde. In de gauwigheid berekende hij dat hij toch nog wel 1030 berekeningen zou moeten uitvoeren. Zodoende koos hij voor een aantal beperkingen: (1) het getal 1 vermijden, (2) niet groter dan 24, (3) zorg voor één dobbelsteen met relatief hogere waarden.

De uitslag

En dan is het natuurlijk de vraag: hoe presteerden deze dobbelstenen? We voerden het oorspronkelijke programma uit met deze dobbelstenen en vonden: 

Naam    Score    Percentage
Casper de With    83499    64,4282%
Lance Bakker    83509    64,4360%
Daan de Groot    83526    64,4491%

Het verschil van de drie inzenders was maar 27, echt marginaal. Daarom heeft de jury besloten om alle drie de inzenders te belonen met ons nieuwe boek De Dikke Pythagoras met 601 breinbrekers.

De Python code zien? Die zit onder de knop [Bekijk oplossing]

 

Bekijk oplossing