Penney Ante is een gokspel waarbij twee spelers elk een verschillende, maar even lange reeks van opeenvolgende worpen met een muntstuk kiezen. Bijvoorbeeld kop-kop-munt of kortweg KKM. Daarna wordt herhaaldelijk een muntstuk opgeworpen, totdat één van de twee gekozen reeksen wordt waargenomen. De speler die deze reeks gekozen heeft, wint het spel.
Bestaat er een strategie die de ene speler een grotere kans geeft om te winnen dan de andere speler? Vreemd genoeg bestaat die wel degelijk. John Conway vond zelfs een eenvoudige manier om de kans te berekenen dat een gekozen reeks zal winnen tegen een andere reeks. We leggen het algoritme hier uit voor tripletten (reeksen van lengte drie), maar het is algemeen toepasbaar voor reeksen van willekeurige lengte, zelfs voor reeksen van verschillende lengte.
Eerst plaatsen we de twee tripletten onder elkaar, waarbij de letters op corresponderende posities netjes onder elkaar uitgelijnd worden. We hebben dit hieronder gedaan voor de twee tripletten MKK en KKK. We vergelijken nu de twee tripletten: als ze gelijk zijn, dan plaatsen we een 1 boven de eerste letter van de eerste reeks, anders plaatsen we een 0.
0 MKK KKK
Vervolgens verwijderen we de eerste letter van het bovenste triplet, en schuiven de overige letters één positie naar links, waardoor de beginletters weer netjes onder elkaar komen te staan. Daarna vergelijken we de twee letters van de bovenste reeks met de eerste twee letters van de onderste reeks: als ze gelijk zijn, dan plaatsen we een 1 boven de eerste letter van de eerste reeks, anders plaatsen we een 0.
1 KK KKK
We blijven deze procedure herhalen tot en met de laatste letter van de bovenste reeks, waarbij we telkens de resterende letters van de bovenste reeks vergelijken met evenveel letters aan het begin van de onderste reeks (als de onderste reeks minder letters heeft dan de bovenste reeks, dan schrijven we per definitie een 0).
1 K KKK
Finaal schrijven we alle bekomen enen en nullen achter elkaar, wat op de volgende manier kan voorgesteld worden:
011 MKK KKK
De resulterende reeks van enen en nullen noemen we een bitreeks. Deze bitreeks is een maat voor de graad van overlap tussen de twee reeksen van opeenvolgende worpen, en kan geïnterpreteerd worden als een binair getal. In bovenstaand voorbeeld bekwamen we de bitreeks 011, wat als binair getal gelijk is aan de decimale waarde 3.
De bitreeksen zoals we die hierboven hebben leren bepalen, kunnen we nu gebruiken om de kansverhouding te berekenen voor twee gegeven reeksen $$A$$ en $$B$$. We noteren de bitreeks die we bekomen als we de reeks $$A$$ zowel bovenaan als onderaan schrijven als $$b_{AA}$$, de bitreeks die we bekomen als we de reeks $$A$$ bovenaan en de reeks $$B$$ onderaan schrijven als $$b_{AB}$$, enzoverder. De kansverhouding $$k_A\!:\!k_B$$ als de reeksen $$A$$ en $$B$$ het tegen elkaar opnemen, kunnen we dan berekenen als \[ \begin{aligned} k_A &= b_{BB} - b_{BA} \\ k_B &= b_{AA} - b_{AB} \end{aligned} \] waarbij we voor de aftrekking in het rechterlid gebruikmaken van de decimale waarde van de bitreeksen. Als we als voorbeeld nemen dat $$A$$ = KKK en $$B$$ = MKK, dan kunnen we eerst de bitreeksen bepalen:
111 000 A:KKK A:KKK A:KKK B:MKK 100 011 B:MKK B:MKK B:MKK A:KKK
Als we deze bitreeksen omzetten naar hun decimale waarden (het binaire getal 111 is gelijk aan 7, het binaire getal 000 is gelijk aan 0, het binaire getal 100 is gelijk aan 4 en het binaire getal 011 is gelijk aan 3) en invullen in bovenstaande vergelijkingen, dan krijgen we dat \[ \begin{aligned}k_A &= (100)_2 - (011)_2 = 4 - 3 = 1 \\ k_B &= (111)_2 - (000)_2 = 7 - 0 = 7 \end{aligned} \] De kansverhouding dat reeks $$A$$ wint tegen reeks $$B$$ is dus $$k_A\!:\!k_B = 1\!:\!7$$. Merk op dat doorgaans niet de kansverhouding zelf gerapporteerd wordt, maar de genormaliseerde kansverhouding die we bekomen door $$k_A$$ en $$k_B$$ te delen door hun grootste gemeenschappelijke deler. We schrijven daarom niet dat de kansverhouding $$4\!:\!2$$ is, maar $$2\!:\!1$$.
Als we de kans dat reeks $$A$$ wint noteren als $$p_A$$ en de kans dat reeks $$B$$ wint als $$p_B$$, dan bekomen we dat \[ p_A = \frac{k_A}{k_A + k_B} = \frac{1}{ 1 + 7} = \frac{1}{8},\ p_B = \frac{k_B}{k_A + k_B} = \frac{7}{ 1 + 7} = \frac{7}{8} \] Merk op dat het bij deze kansberekeningen niet uitmaakt of we gebruikmaken van de kansverhouding of de genormaliseerde kansverhouding.
In deze opgave stellen we de uitkomst van een worp met een muntstuk voor door een hoofdletter: K voor kop en M voor munt. Op die manier kunnen we een reeks opeenvolgende worpen voorstellen als een string die enkel bestaat uit de letters K en M. Gevraagd wordt:
Schrijf een functie winnaar waaraan drie argumenten moeten doorgegeven worden. De eerste twee argumenten stellen de reeksen opeenvolgende worpen voor die door de twee spelers van een spelletje Penney Ante werden gekozen. Het derde argument is de reeks opeenvolgende worpen die we effectief met een muntstuk geworpen hebben. De functie moet de waarde 1 teruggeven als de eerste gekozen reeks (eerste argument) het spelletje Penney Ante wint, de waarde 2 als de tweede gekozen reeks (tweede argument) het spelletje wint, en de waarde 0 als geen enkele reeks het spelletje wint omdat ze beide niet worden waargenomen in de reeks opeenvolgende worpen die als derde argument werd doorgegeven. Indien de eerste twee argumenten gelijk zijn, dan moet de functie een AssertionError opwerpen met de boodschap reeksen mogen niet gelijk zijn. Indien de eerste twee argumenten niet even lang zijn, dan moet de functie een AssertionError opwerpen met de boodschap reeksen moeten zelfde lengte hebben.
Schrijf een functie bitreeks waaraan twee reeksen van worpen $$A$$ en $$B$$ moeten doorgegeven worden. De functie moet een string met de bitreeks $$b_{AB}$$ teruggeven.
Schrijf een functie kansverhouding waaraan twee reeksen van worpen $$A$$ en $$B$$ moeten doorgegeven worden. De functie moet een tuple $$(k_A, k_B)$$ teruggeven met de genormaliseerde kansverhouding in het spelletje Penney Ante waarin de twee gegeven reeksen het tegen elkaar opnemen. Hierbij moet gelden dat $$k_A, k_B \in \mathbb{N}$$.
In Python kan je de ingebouwde functie int gebruiken om de stringvoorstelling van een binair getal om te zetten naar de corresponderende decimale waarde. Deze functie beschikt immers over een tweede optionele parameter (standaardwaarde: 10) waaraan je het grondtal kan doorgeven van het getal waarvan de stringvoorstelling als eerste argument aan functie wordt doorgegeven.
>>> int('011', 2) 3
Schrijf een functie kansen waaraan twee reeksen van worpen $$A$$ en $$B$$ moeten doorgegeven worden. De functie moet een tuple $$(p_A, p_B)$$ teruggeven met de winstkansen in het spelletje Penney Ante waarin de twee gegeven reeksen het tegen elkaar opnemen. Hierbij moet gelden dat $$p_A, p_B \in \mathbb{R}$$.
De twee reeksen van worpen die aan de functies bitreeks, kansverhouding en kansen worden doorgegeven, hoeven niet even lang te zijn en mogen ook gelijk zijn.
>>> winnaar('KKK', 'MKK', 'KMKMKKKKMKKKMMMMKMKK')
2
>>> winnaar('MKM', 'MMK', 'KMKMKKKKMKKKMMMMKMKK')
1
>>> winnaar('MKK', 'KKM', 'KKKKKKKKKKKKKKKKKKKK')
0
>>> winnaar('MKK', 'MKK', 'KKKKKKKKKKKKKKKKKKKK')
Traceback (most recent call last):
AssertionError: reeksen mogen niet gelijk zijn
>>> winnaar('MKKM', 'MKK', 'KKKKKKKKKKKKKKKKKKKK')
Traceback (most recent call last):
AssertionError: reeksen moeten zelfde lengte hebben
>>> bitreeks('KKK', 'MKK')
'000'
>>> bitreeks('MKM', 'MMK')
'001'
>>> bitreeks('MKK', 'KKM')
'011'
>>> kansverhouding('KKK', 'MKK')
(1, 7)
>>> kansverhouding('MKM', 'MMK')
(1, 2)
>>> kansverhouding('MKK', 'KKM')
(3, 1)
>>> kansen('KKK', 'MKK')
(0.125, 0.875)
>>> kansen('MKM', 'MMK')
(0.3333333333333333, 0.6666666666666666)
>>> kansen('MKK', 'KKM')
(0.75, 0.25)
Collins S (1982). Coin sequence probabilities and paradoxes. Bulletin of the Institute of Mathematics and its Applications 18, 227-232.
Felix D (2006). Optimal Penney Ante strategy via correlation polynomial identities. The Electronic Journal of Combinatorics 13. 1
Gardner M (1974). On the paradoxical situations that arise from nontransitive relations. Scientific American 231(4), 120-125.
Gardner M (1988). Time travel and other mathematical bewilderments. W.H. Freeman, 55-69. 2
Nickerson RS (2007). Penney Ante: Counterintuitive probabilities in coin tossing. The UMAP journal 28(4), 503-532. 3
Nishiyama Y (2010). Pattern matching probabilities and paradoxes as a new variation on Penney's coin game. International Journal of Pure and Applied Mathematics 59(3), 357-366. 4
Nishiyama Y, Humble S (2014). Winning odds. Plus Magazine 55. 5
Penney W (1975). Problem 95: penney-ante. Journal of Recreational Mathematics 7(4), 3217.