Bridge is een kaartspel dat gespeeld wordt met 4 spelers en een klassiek kaartspel van 52 kaarten.

De kaarten zijn van een bepaalde soort (suit): Schoppen (Spades), Harten (Hearts), Ruiten (Diamonds) of Klaveren (Clubs) en hebben een bepaalde rang (rank): Aas (Ace, A), Koning (King, K), Vrouw (Queen, Q), Boer (Jack, J), 10 (T), 9, 8, 7, 6, 5, 4, 3, 2.

Op een bridgetornooi krijgen alle spelers een vaste positie aan de tafel toegewezen, die benoemd wordt met de windstreken: Noord (North, N), Oost (East, E), Zuid (South, S) of West (West, W).

Bridge Tournament
Bridge Tournament

Bij elk spelletje is een bepaalde speler de deler (dealer). We beginnen bij spel 1 bij Noord, in spel 2 is Oost de deler, in spel 3 Zuid, enzovoort.

Het delen van de kaarten wordt al lang niet meer manueel gedaan. Een computerprogramma bepaalt de kaartverdelingen, die worden doorgegeven aan een deelmachine, en deze machine levert kaartspellen af in bordjes (boards) voorzien van 4 vakjes met elk 13 kaarten, de "handen" van de 4 spelers.

Bridge Boards
Bridge Boards

Bestandsformaat pbn

Er bestaat een vast internationaal formaat ("pbn", portable bridge notation) om de gegevens van een bridgetornooi op te slaan. Dit bestand bevat ondermeer de kaartverdelingen van alle spelletjes onder een vaste vorm. Een pbn-bestand kan ingelezen worden door deelmachines om de kaarten te delen of door bridge-software om de spelletjes achteraf opnieuw te kunnen spelen en analyseren.

Hier vind je een voorbeeld van een pbn-bestand: 19_11_29.pbn1. Dit is een gewoon tekstbestand in utf-8 encoding. Je kan het openen in notepad (kladblok of textedit) om het te bekijken.

Kaartverdeling van één hand in pbn-formaat:

De kaarten van één speler worden in de volgorde schoppen, harten, ruiten en klaveren neergeschreven, gescheiden door een punt. Zo'n kaartverdeling is dus altijd een string van 16 karakters (13 kaarten + 3 punten).

Voorbeeld (zie afbeelding): K742.KJ.AT84.A98

Bridge Hand
K742.KJ.AT84.A98

De kaartverdeling van een spel in pbn-formaat ziet er als volgt uit:

[Deal "E:T87643.A64.AK.95 Q952.Q7.J74.T864 AJ.KT532.Q8.KQJ2 K.J98.T96532.A73"]

De kaartverdeling in een pbn-bestand begint steeds met het woord "Deal", vervolgens komt de deler (N, E, S of W), een dubbelpunt, en dan de handen van de vier spelers gescheiden door een spatie. De eerste hand is steeds voor de deler (hierboven East), en vervolgens draaien we rond volgens de vier windstreken (hierboven in deze volgorde: East, South, West en North).

Opgave

Voorbeeld

>>> process_pbn_deal('E:T87643.A64.AK.95 Q952.Q7.J74.T864 AJ.KT532.Q8.KQJ2 K.J98.T96532.A73')
{'E': {'Clubs': '95', 'Diamonds': 'AK', 'Hearts': 'A64', 'Spades': 'T87643'},
 'N': {'Clubs': 'A73', 'Diamonds': 'T96532', 'Hearts': 'J98', 'Spades': 'K'},
 'S': {'Clubs': 'T864', 'Diamonds': 'J74', 'Hearts': 'Q7', 'Spades': 'Q952'},
 'W': {'Clubs': 'KQJ2', 'Diamonds': 'Q8', 'Hearts': 'KT532', 'Spades': 'AJ'}}
>>> process_pbn_file('19_11_29.pbn')
['N:KJ8.A95.A62.A983 A7542.K.JT.QJ742 Q963.J64.K943.KT T.QT8732.Q875.65',
 'E:3.AJT43.964.QJ74 Q952.Q76.J82.AT6 KT4.K95.AKT5.K93 AJ876.82.Q73.852',
 'S:75.J84.AK972.A54 T42.AT532.J6.Q76 QJ963.KQ7..KT983 AK8.96.QT8543.J2',
 'W:3.T.AJT8743.AKT7 QT9642.Q62.5.983 AK5.AKJ75.K62.QJ J87.9843.Q9.6542',
 'N:J9.A5.AKJT75.QT7 K53.KQ976.2.J982 QT764.JT82.Q8.K5 A82.43.9643.A643',
 'E:QT95.T86.KT87.43 J.K7532.AJ6.AT92 A8742.A.Q542.KQJ K63.QJ94.93.8765',
 'S:J53.KQ3.Q975.T43 KT6.AJ5.AJ643.J9 Q87.T62.KT2.AK82 A942.9874.8.Q765',
 'W:K6.KT.AKJT4.AJ43 432.765.Q73.KQ86 A75.2.98652.T752 QJT98.AQJ9843..9',
 'N:AK42.J6.AT98.AJ9 765.K43.6.T87542 QT8.QT87.732.KQ3 J93.A952.KQJ54.6',
 'E:AKJ76.JT.AQJ75.8 T982.8432.K432.T .AQ5.T98.A976542 Q543.K976.6.KQJ3',
 'S:KQ8.AKJT5.AT.J53 AJ7652.3.83.AK64 .Q98642.J9764.T8 T943.7.KQ52.Q972',
 'W:752.T94.K653.973 JT96.KQJ8.J74.AQ AKQ84.76.A82.865 3.A532.QT9.KJT42',
 'N:Q943.J98.J95.AK9 KT87.QT4.Q86.Q86 AJ65.AK2.T3.J542 2.7653.AK742.T73',
 'E:QJ.Q52.QJ865.QT2 AT94.8.KT732.985 6532.AK943.A4.J6 K87.JT76.9.AK743',
 'S:T5.974.94.KQ7532 86.AK6.KQT63.T98 AK93.QJ83.J75.J6 QJ742.T52.A82.A4',
 'W:KT2.KT3.KQ63.984 QJ643.J876.A9.QT 8.AQ52.7542.AK76 A975.94.JT8.J532',
 'N:AKJ95.4.KQ86.KJ5 T863.T6.J75.QT73 Q74.KQJ.A9.98642 2.A987532.T432.A',
 'E:AQT874.83.6.KJ65 .QT9764.AKJ82.32 KJ653.AJ52.Q95.7 92.K.T743.AQT984',
 'S:KT43.A986.A.Q972 A.QJ7.T8743.KT83 QJ98752.2.Q9652. 6.KT543.KJ.AJ654',
 'W:K643.K2.A965.J92 A82.J973.Q872.QT T95.AT654.T4.K87 QJ7.Q8.KJ3.A6543',
 'N:T9854.7654.KT.Q6 AQ6.T2.AJ.AKJ543 K32.Q93.9643.982 J7.AKJ8.Q8752.T7',
 'E:QJ3.Q732.QT63.94 75.JT964.82.QJT6 K984.8.754.K8532 AT62.AK5.AKJ9.A7',
 'S:A85.QJ942.J92.Q6 KT62.A87.AK3.753 QJ973.K65.8.JT98 4.T3.QT7654.AK42',
 'W:64.AQ8652..AQT32 AKT2.KT43.K6.K97 J98.J9.AJ9742.85 Q753.7.QT853.J64',
 'N:Q54.AKQ.754.KQ75 AK6.842.AKT98.42 872.T7653.J632.8 JT93.J9.Q.AJT963',
 'E:632.J9542.43.974 J84.K87.AJT8.QJ3 A9.AQT63.KQ96.AT KQT75..752.K8652',
 'S:AT8.Q87.4.JT9752 QJ5.A942.T52.KQ3 K974.KJ63.KJ7.A4 632.T5.AQ9863.86',
 'W:9652.J873.74.JT7 A.AKT654.Q8.Q652 KQJT3.2.9632.K98 874.Q9.AKJT5.A43']
 >>> get_hand('29/11/2019', 2,'N' )
{'Clubs': '852', 'Diamonds': 'Q73', 'Hearts': '82', 'Spades': 'AJ876'}