Maak een stapel met evenveel rode als zwarte kaarten, waarbij de kaarten met hun beeldzijde naar onder liggen. Schud de kaarten willekeurig door elkaar.

Verdeel de kaarten nu op de volgende manier over drie nieuwe stapels. Draai de bovenste kaart van de stapel om. Als het een rode kaart is dan leg je de volgende kaart op de rode stapel zonder naar zijn kleur te kijken. Als het een zwarte kaart is dan leg je de volgende kaart op de zwarte stapel zonder naar zijn kleur te kijken. De bovenste kaart die je hebt omgedraaid leg je op de wegwerpstapel. Herhaal deze stappen totdat je alle kaarten uit de oorspronkelijke stapel verdeeld hebt over de drie nieuwe stapels.

Kies nu willekeurig een natuurlijk getal dat kleiner is dan het aantal kaarten in de rode en de zwarte stapel. Kies willekeurig $$n$$ kaarten uit elk van de twee stapels en verplaats die kaarten naar de andere stapel. Het aantal rode kaarten in de rode stapel zal altijd gelijk zijn aan het aantal zwarte kaarten in de zwarte stapel.

duizelingwekkende kaarttruc
Op het einde van deze kaarttruc zitten er evenveel rode kaarten in de rode stapel als dat er zwarte kaarten in de zwarte stapel zitten.

Opgave

Een standaard kaartspel bestaat uit 52 verschillende kaarten die onderverdeeld worden in vier soorten van elk 13 kaarten: 13 klaveren (), 13 ruiten (), 13 harten () en 13 schoppen (). Klaveren en schoppen zijn zwart, ruiten en harten zijn rood. Van elke soort zijn er telkens kaarten met een rang van 2 tot en met 10, een boer, een vrouw, een heer en een aas. Daarnaast bevat een spel soms twee of drie jokers, maar die laten we hier even buiten beschouwing.

Elke kaart van een standaard kaartspel wordt voorgesteld als een string (str) die bestaat uit de rang van de kaart, gevolgd door de soort van de kaart:

Zo stelt AS bijvoorbeeld schoppenaas voor, 10H hartentien en KC klaverenheer.

Een stapel kaarten wordt voorgesteld als een lijst (list) of een tuple (tuple) met de voorstellingen van de opeenvolgende kaarten uit de stapel, waarbij de bovenste kaart van de stapel het eerste element is. Een stapel hoeft niet noodzakelijk alle 52 kaarten van een kaartspel te bevatten. Gevraagd wordt:

Voorbeeld

>>> stapel = ['4C', '6C', 'JC', '4D', '8D', '9C', '9D', '8S', '2H', '10C', '5D', '7C', '8H', '10H', 'AH', 'KD', 'AC', 'QH', '5C', 'AS', '5H', 'JS', '8C', 'JD']
>>> aantal_kaarten(stapel)
24
>>> aantal_kaarten(stapel, kleur='rood')
12
>>> aantal_kaarten(stapel, kleur='zwart')
12
>>> aantal_kaarten(stapel, kleur='schoppen')
Traceback (most recent call last):
AssertionError: ongeldige kleur

>>> stapel1, stapel2 = roodzwart(stapel)
>>> stapel1
('JS', 'KD', '10H', '7C', '10C', '8S', '9C')
>>> stapel2
('JD', 'AS', 'QH', '4D', '6C')

>>> stapel3, stapel4 = roodzwart(stapel, onderaan=True)
>>> stapel3
('9C', '8S', '10C', '7C', '10H', 'KD', 'JS')
>>> stapel4
('6C', '4D', 'QH', 'AS', 'JD')

>>> stapel5, stapel6 = verwissel(stapel3, stapel4, aantal=3)
>>> stapel5
('6C', '4D', 'QH', '7C', '10H', 'KD', 'JS')
>>> stapel6
('9C', '8S', '10C', 'AS', 'JD')
>>> aantal_kaarten(stapel3, kleur='rood')
2
>>> aantal_kaarten(stapel4, kleur='zwart')
2

>>> stapel7, stapel8 = verwissel(stapel3, stapel4, aantal=2, onderaan=True)
>>> stapel7
('9C', '8S', '10C', '7C', '10H', 'AS', 'JD')
>>> stapel8
('6C', '4D', 'QH', 'KD', 'JS')
>>> aantal_kaarten(stapel5, kleur='rood')
4
>>> aantal_kaarten(stapel6, kleur='zwart')
4

Het effect van het verwisselen van de drie bovenste kaarten tussen twee stapels wordt hieronder geïllustreerd aan de hand van dezelfde twee stapels waarop de functie verwissel wordt aangeroepen in het voorbeeld.

bovenste kaarten verwisselen
Drie bovenste kaarten van de twee stapels verwisselen.

Hieronder doen we hetzelfde, maar dan voor onder twee onderste kaarten van de stapels.

onderste kaarten verwisselen
Twee onderste kaarten van de twee stapels verwisselen.