Het denkspel Bloemblaadjes rond de Roos wordt gespeeld met vijf dobbelstenen. Het wordt gespeeld door een computerprogramma of met echte dobbelstenen die worden geworpen door een Potentaat van de Roos, een persoon die het geheim achter het spel kent. Voor elke worp met de dobbelstenen is er een unieke numerieke oplossing. De spelers moeten de juiste oplossing proberen te achterhalen via inductief redeneren. Indien ze er niet in slagen om de juiste oplossing te raden, wordt de juiste oplossing meegedeeld door de Potentaat van de Roos, en moeten ze proberen om bij een volgende worp de juiste oplossing te raden.
Het spel kent slechts drie regels:
De naam van het spel is Bloemblaadjes rond de Roos, en deze naam is belangrijk.
Het antwoord is steeds een niet-negatief even geheel getal.
Iedereen die het geheim van het spel kent, mag de juiste oplossing geven die correspondeert met een bepaalde worp, maar mag het geheim zelf nooit prijsgeven.
Om het geheim van het spel niet te onthullen, hebben we het correcte antwoord op de vraag hoeveel bloemblaadjes er rond de roos staan opgeslaan in het bestand bloemblaadjes.txt1. Elke regel van dit bestand bevat zes natuurlijke getallen, die telkens van elkaar worden gescheiden door één enkele spatie. De eerste vijf getallen geven telkens het aantal ogen voor een mogelijke worp met vijf dobbelstenen, terwijl het zesde getal aangeeft met hoeveel bloemblaadjes deze worp correspondeert. Omdat het aantal bloemblaadjes onafhankelijk is van de volgorde van de dobbelstenen (oeps, nu hebben we toch al een deel van de oplossing onthuld) hebben we de eerste vijf getallen telkens in oplopende volgorde gesorteerd, zodat we voor worpen waarbij enkel de volgorde van de dobbelstenen verschilt slechts één enkele regel in het bestand moeten opnemen.
Schrijf een functie leesOplossingen die de oplossingen voor de verschillende combinaties inleest uit een tekstbestand, en daarmee een dictionary opbouwt die als resultaat door de functie moet teruggegeven worden. De locatie van het tekstbestand moet als argument aan de functie doorgegeven worden. Voor elke regel uit het bestand vormen de eerste vijf getallen de elementen van een tuple dat als sleutel gebruikt wordt in de dictionary die als resultaat door de functie moet teruggegeven worden, en vormt het zesde getal de waarde die correspondeert met deze sleutel.
Schrijf een functie potentaat die voor een gegeven worp van vijf dobbelstenen aangeeft met hoeveel bloemblaadjes rond de roos deze worp correspondeert. Aan deze functie moeten twee argumenten doorgegeven worden. Het eerste argument is een lijst van vijf natuurlijke getallen tussen 1 en 6 (grenzen inbegrepen). De elementen van deze lijst corresponderen met het aantal ogen voor een worp met vijf dobbelstenen, worden in willekeurige volgorde opgelijst. Het tweede argument is een dictionary die de oplossing voor elke mogelijke worp met vijf dobbelstenen bevat (zoals die wordt teruggegeven door de functie leesOplossingen).
>>> oplossingen = leesOplossingen('bloemblaadjes.txt')
>>> oplossingen
{(1, 1, 1, 2, 3): 2, (5, 5, 5, 5, 6): 16, ..., (1, 3, 4, 4, 4): 2}
>>> potentaat([3, 5, 5, 4, 3], oplossingen)
12
>>> potentaat([6, 5, 3, 4, 2], oplossingen)
6