Introduction
The previous Bridge post looked at various aspects of a single hand including suit distributions, High Card Points and honour holdings. This post will look at similar aspects but will focus on the combined holdings of two hands. We will only consider the situation immediately after the deal and before any cards are played.
Although there are four players (and four hands) in a Bridge deal, they form two partnerships comprising of the NorthSouth and EastWest hands. Therefore the combined holdings of the 26 cards held between these hands is a key element of the game.
A quick reminder of some terminology:
4234  Specific suit distribution (i.e. 4♠︎, 2♥︎, 3♦︎ and 4♣︎). 
4 4 3 2  Generic suit distribution (i.e. any hand with two 4card, one 3card and a 2card suit). 
C(n,k)  Combination function (see comb below). Returns the number of ways to select ‘k’ items from a collection of ‘n’ objects where order is unimportant. 
The same utility functions used in the previous post are used here. They are repeated below for convenience.
(defn fact "Return the factorial of integer n >= 0" [n] (apply *' (range 1 (inc n)))) (defn comb "Return the combination  ways of selecting k from n (k<=n)" [n k] (/ (fact n) (*' (fact k) (fact ( n k)))))
Suit Distribution of Two Hands
We can ask equivalent questions about the probability of specific suit distributions between two hands as we did for one in the previous post.
How many partnership combinations are there?
There are two ways to view this. One is to only consider the combined 26 card holding without regard to the holdings of the individual hands, in this case the answer is simply the number of ways you can select 26 cards from 52:
C(52,26) = 495,918,532,948,104 
The other way to view it, is that the individual holdings of each hand are important. In this case, the answer is the number of ways 13 cards can be selected from 52, multiplied by the number of ways 13 cards can be selected from the remaining 39 cards:
C(52,13)C(39,13) = 5,157,850,293,780,050,462,400 
Needless to say both numbers are sufficiently large that you and your partner will not be holding the same cards very often :). However, these values are important as they form the denominators for some of the probability equations developed later.
Suit Distribution of Combined Hands (26cards analysis)
Taking the first view–combined 26cards–we can answer questions like:
What is the probability of suit distributions of two combined hands?
As we did with one hand, we can look at the probability of the combined distribution of two hands by iterating over all possible distributions and calculating the probability based on 26 cards instead of 13 cards.
This produces the specific distribution with each suit treated uniquely. For example, there will be separate results for 8666, 6866, 6686 and 6668 (i.e. where the 8 cards are Spades, Hearts, Diamonds and Clubs respectively).
The Clojure code is shown below:
"Probability of specific suit distribution for two combined hands (ie 26 cards)" (def distrcombinedspecific (let [c5226 (comb 52 26)] (for [s (range 14) h (range 14) d (range 14) c (range 14) :when (= 26 (+ s h d c))] (let [cs (* (comb 13 s) (comb 13 h) (comb 13 d) (comb 13 c)) pp (/ (* 100.0 cs) c5226)] [[s h d c] pp])))) (sortby last > distrcombinedspecific) ;=> ([[6 6 7 7] 1.7484724571169408] ; [[6 7 6 7] 1.7484724571169408] ; [[6 7 7 6] 1.7484724571169408] ; [[7 6 6 7] 1.7484724571169408] ; [[7 6 7 6] 1.7484724571169408] ; [[7 7 6 6] 1.7484724571169408] ; [[5 7 7 7] 1.3113543428377057] ; [[6 6 6 8] 1.3113543428377057] ; ... (apply + (map last distrcombinedspecific)) ;=> 100.0 (count distrcombinedspecific) ;=> 1834
From these results, we can see there are 1834 specific combined distributions whose probabilities total to 100.0% (as expected). The most common specific distribution (or shape) has two 7cards suits and two 6cards suits (e.g. 7766, 7676, etc).
The generic distribution combines specific distributions of the same general shape, for example, the four specific distributions mentioned earlier would be grouped under the single generic distribution 8 6 6 6.
The following code performs this grouping and also counts the number of specific distributions associated with each generic distribution.
"Probability of generic suit distribution for two combined hands" (def distrcombinedgeneric (reduce (fn [acc [d p]] (let [gdistr (vec (sort > d)) acc (updatein acc [gdistr :prob] (fnil + 0.0) p) acc (updatein acc [gdistr :cnt] (fnil inc 0))] acc)) (sortedmap) distrcombinedspecific)) ;=> {[7 7 6 6] {:prob 10.490834742701646, :cnt 6}, ; [7 7 7 5] {:prob 5.245417371350823, :cnt 4}, ; [8 6 6 6] {:prob 5.245417371350823, :cnt 4}, ; [8 7 6 5] {:prob 23.604378171078707, :cnt 24}, ; [8 7 7 4] {:prob 6.556771714188528, :cnt 12}, ; [8 8 5 5] {:prob 3.3193656803079423, :cnt 6}, ; [8 8 6 4] {:prob 4.917578785641396, :cnt 12}, ; ... (apply + (map :prob (vals distrcombinedgeneric))) ;=> 99.99999999999996 (count distrcombinedgeneric) ;=> 104
As expected, the number of generic distributions is significantly less at 104. The most common one by far is 8 7 6 5 (23.6%). Note that this is different from the most common specific distribution because there are many more (24) specific distributions that make this generic distribution than there are for 7 7 6 6 which has only six.
The full results are shown in Table 1 below and are downloadable here as a csv file.
The “Specific count” column is the number for specific distributions that make up each generic distribution. So the columns are related as follows:
“Specific count” x “Specific Prob (%)” = “Generic Prob (%)” 


Table 1 Percentage generic probability of combined hands
One immediate observation is that most distributions have at least one suit with eight or more cards. Only the first two distributions (7766 and 7775) don’t and these make up just 15.736% of all distributions.
In Bridge, the combined number of cards (or “fit”) in a suit (particularly a major suit) is important because it often determines whether the two hands should play in a suit contract or a No Trumps contract. With a combined suit holding of eight or more cards, the odds favour a suit contract over a No Trump contract. A fit in a second suit further favours a suit contract and often means a higher contract (or more tricks) is possible with less than the expected number of HCP. The hands are said to have a “good” fit.
We can summarise the results from Table 1 to show the likelihood of various primary and secondary suit fits as shown in Table 2 below.
P/S  5  6  7  8  9  10  11  12  13  Total  Norless  Normore 

7  –  –  15.736  –  –  –  –  –  –  15.736  15.736  100.000 
8  –  5.245  30.161  10.338  –  –  –  –  –  45.745  61.481  84.264 
9  –  6.557  13.660  6.917  0.966  –  –  –  –  28.100  89.581  38.519 
10  –  3.424  3.510  1.390  0.325  0.023  –  –  –  8.673  98.254  10.419 
11  0.134  0.755  0.498  0.160  0.031  0.004  0.000  –  –  1.582  99.835  1.746 
12  0.037  0.075  0.035  0.009  0.001  0.000  0.000  0.000  –  0.158  99.993  0.165 
13  0.003  0.003  0.001  0.000  0.000  0.000  0.000  0.000  0.000  0.007  100.000  0.007 
Table 2 Percentage probability of primary (P) and secondary (S) suit ‘fits’ in combined hands
While this view of the combined 26cards provides some useful insights it does not distinguish between the holdings in each hand separately. So an 8card fit, for example, could be made up of any combination of 08, 17, 26, 35, 44, 53, 62, 71 or 80 between the two hands. In the next section we look at how the two hands separately contribute to the combined result.
Suit Distribution of Two Separate Hands (2 x 13cards)
Using the second view–the distribution between two separate hands–provides a more comprehensive result. It captures the detail of the distribution associated with each hand but generates significantly more data that requires additional processing to exact useful information.
As we did previously, let’s consider an example, say one hand has the specific distribution 3532 (i.e. 3♠︎, 5♥︎, 3♦︎ and 2♣︎) and the other has 2344 (i.e. 2♠︎, 3♥︎, 4♦︎ and 4♣︎). We know the number of ways to select the first hand from the total ways for all hands is:
Ways to select:  C(13,3)C(13,5)C(13,3)C(13,2) 
Total ways:  C(52,13) 
The second hand must be selected from the remaining cards which means only 10 of the remaining Spades, 8 of the remaining Hearts, 10 of the remaining Diamonds and 11 of the remaining Clubs, and the total ways it can be selected must come for the remaining 39 cards as follows:
Ways to select:  C(10,2)C(8,3)C(10,4)C(11,4) 
Total ways:  C(39,13) 
The probability of these two specific distributions is the product of the ‘waystoselect’ divided by the product of the ‘totalways’:
C(13,3)C(13,5)C(13,3)C(13,2)C(10,2)C(8,3)C(10,4)C(11,4)  
———————————————————————  = 0.02780163% 
C(52,13)C(39,13) 
Importantly, if we took the second hand first, and the first hand second, the numerator would be quite different. The new calculation would be:
C(13,2)C(13,3)C(13,4)C(13,4)C(11,3)C(10,5)C(9,3)C(9,2)  
———————————————————————  = 0.02780163% 
C(52,13)C(39,13) 
Somewhat amazingly, although what we would expect intuitively, the result turns out to be the same. The mathematical magic behind this is that the factors for each suit are interchangeable:
C(13,a)C(13a,b)  = 13!/a!(13a)! x (13a)!/b!(13ab)! 
= 13!/a!b!(13ab)!  
= 13!/b!(13b)! x (13b)!/a!(13ba)!  
= C(13,b)C(13b,a) 
This explains why the result is independent of the order of the hands.
This example can be easily generalised for two hands with specific distributions s1h1d1c1 and s2h2d2c2 as:
C(13,s1)C(13,h1)C(13,d1)C(13,c1)C(13s1,s2)C(13h1,h2)C(13d1,d2)C(13c1,c2) 
——————————————————————— 
C(52,13)C(39,13) 
The following Clojure code calculates the percentage probability of all possible specific two hand distributions. As each of the eight possible suit counts can range from 0 to 13 there are potentially 14^{8} = 1,475,789,056 iterations. To reduce this somewhat epic number, the second suit upper range is limited to 13 less the first suit, which brings it down to 121,550,625 iterations. It is still a sizeable bit of number crunching which takes about 15 seconds on my MacBook Pro.
(def distrtwohandsspecific (let [c5213c3913 (* (comb 52 13) (comb 39 13))] (for [s1 (range 14) s2 (range ( 14 s1)) h1 (range 14) h2 (range ( 14 h1)) d1 (range 14) d2 (range ( 14 d1)) c1 (range 14) c2 (range ( 14 c1)) :when (and (= 13 (+ s1 h1 d1 c1)) (= 13 (+ s2 h2 d2 c2)))] (let [cs (* (comb 13 s1) (comb ( 13 s1) s2) (comb 13 h1) (comb ( 13 h1) h2) (comb 13 d1) (comb ( 13 d1) d2) (comb 13 c1) (comb ( 13 c1) c2)) pp (/ (* 100.0 cs) c5213c3913)] [[s1 h1 d1 c1] [s2 h2 d2 c2] pp])))) (sortby last > distrtwohandsspecific) ;=> ([[3 3 3 4] [3 3 4 3] 0.08237519989109292] ; [[3 3 4 3] [3 3 3 4] 0.08237519989109292] ; [[3 3 3 4] [3 4 3 3] 0.08237519989109292] ; [[3 3 4 3] [3 4 3 3] 0.08237519989109292] ; [[3 4 3 3] [3 3 3 4] 0.08237519989109292] ; [[3 4 3 3] [3 3 4 3] 0.08237519989109292] ; [[3 3 3 4] [4 3 3 3] 0.08237519989109292] ; [[3 3 4 3] [4 3 3 3] 0.08237519989109292] ; [[3 4 3 3] [4 3 3 3] 0.08237519989109292] ; [[4 3 3 3] [3 3 3 4] 0.08237519989109292] ; [[4 3 3 3] [3 3 4 3] 0.08237519989109292] ; [[4 3 3 3] [3 4 3 3] 0.08237519989109292] ; [[3 3 3 4] [3 3 3 4] 0.07060731419236536] ; [[3 3 4 3] [3 3 4 3] 0.07060731419236536] ; [[3 4 3 3] [3 4 3 3] 0.07060731419236536] ; [[4 3 3 3] [4 3 3 3] 0.07060731419236536] ; [[2 3 4 4] [4 3 3 3] 0.0617813999183197] ; [[2 4 3 4] [4 3 3 3] 0.0617813999183197] ; [[2 4 4 3] [4 3 3 3] 0.0617813999183197] ; [[3 2 4 4] [3 4 3 3] 0.0617813999183197] ; ...) (apply + (map last distrtwohandsspecific)) ;=> 99.99999999998808 (count distrtwohandsspecific) ;=> 239344
The results show there are 239,344 specific two hand distributions whose total probability sums to 100% (as expected). This is a lot of data to digest but it allows us to answer a broad range of distributional questions like:
What is the probability of two hands having exactly the same shape?
The following code uses the result calculated above to sum the probabilities of each case where the two distributions are identical.
"Probability of identical distributions in each hand" (reduce (fn [acc [d1 d2 p]] (if (= d1 d2) (update acc (vec (sort > d1)) (fnil + 0.0) p) acc)) (sortedmap) distrtwohandsspecific) ;=> {[4 3 3 3] 0.28242925676946146, ; [4 4 3 2] 0.27801629963243857, ; [4 4 4 1] 0.008845973170123048, ; [5 3 3 2] 0.08472877703083843, ; [5 4 2 2] 0.027801629963243858, ; [5 4 3 1] 0.016175493796796423, ; ...}
The full result is shown in Table 3 below.
Distr.  Absolute Prob (%)  Relative Prob (%) 

4333  0.28243  40.25368 
4432  0.27802  39.62472 
4441  0.00885  1.26079 
5332  0.08473  12.07611 
5422  0.02780  3.96247 
5431  0.01618  2.30544 
5440  0.00014  0.01940 
5521  0.00081  0.11527 
5530  0.00004  0.00591 
6322  0.00177  0.25159 
6331  0.00051  0.07319 
6421  0.00034  0.04803 
6430  0.00002  0.00246 
6511  0.00000  0.00070 
6520  0.00000  0.00025 
6610  0.00000  0.00000 
Total  0.70162  100.00 
Table 3 Percentage probability of two hands with exactly the same shape
These hands can cause problems, particularly with a major suit fit, as they are often played in a suit contact where a No Trumps contract is frequently better because of the lack of ruffing opportunities.
The following sections take the above specific two hand distribution results and interpret them for:
 Single suit
 Two suits
 Full distribution (all four suits)
Single Suit Analysis
This section focuses on the details of any given single suit to answer questions such as:
How is any one suit distributed between the two hands?
If we pick one suit, Spades say, what is the probability of holding X cards in one hand and Y cards in the other. We can process the results above with the following code to build a table of XY ‘fit’ probabilities.
"Probability of holding a particular XY fit in any one suit" (def onesuitfit (reduce (fn [acc [d1 d2 p]] (update acc [(d1 0) (d2 0)] (fnil + 0.0) p)) (sortedmap) distrtwohandsspecific)) ;=> {[0 0] 0.0016378547895184352, ; [0 1] 0.019771247102043903, ; [0 2] 0.09490198608981093, ; [0 3] 0.23923208993472986, ; [0 4] 0.3518118969628408, ; ... (apply + (map val onesuitfit)) ;=> 100.0
The full results are in Table 4 below.
X/Y  0  1  2  3  4  5  6  7  8  9  10  11  12  13 

0  0.0016  0.0198  0.0949  0.2392  0.3518  0.3166  0.1778  0.0622  0.0133  0.0017  0.0001  0.0000  0.0000  0.0000 
1  0.0198  0.2056  0.8482  1.8294  2.2868  1.7331  0.8088  0.2311  0.0394  0.0038  0.0002  0.0000  0.0000  – 
2  0.0949  0.8482  2.9936  5.4883  5.7771  3.6396  1.3865  0.3151  0.0411  0.0029  0.0001  0.0000  –  – 
3  0.2392  1.8294  5.4883  8.4731  7.4140  3.8129  1.1554  0.2009  0.0188  0.0008  0.0000  –  –  – 
4  0.3518  2.2868  5.7771  7.4140  5.2957  2.1664  0.5024  0.0628  0.0038  0.0001  –  –  –  – 
5  0.3166  1.7331  3.6396  3.8129  2.1664  0.6782  0.1130  0.0090  0.0003  –  –  –  –  – 
6  0.1778  0.8088  1.3865  1.1554  0.5024  0.1130  0.0121  0.0005  –  –  –  –  –  – 
7  0.0622  0.2311  0.3151  0.2009  0.0628  0.0090  0.0005  –  –  –  –  –  –  – 
8  0.0133  0.0394  0.0411  0.0188  0.0038  0.0003  –  –  –  –  –  –  –  – 
9  0.0017  0.0038  0.0029  0.0008  0.0001  –  –  –  –  –  –  –  –  – 
10  0.0001  0.0002  0.0001  0.0000  –  –  –  –  –  –  –  –  –  – 
11  0.0000  0.0000  0.0000  –  –  –  –  –  –  –  –  –  –  – 
12  0.0000  0.0000  –  –  –  –  –  –  –  –  –  –  –  – 
13  0.0000  –  –  –  –  –  –  –  –  –  –  –  –  – 
Table 4 Percentage Probability of X cards in one hand and Y cards in the other for a given suit
We can recast Table 4 data in various ways such as:
Given you have X cards in a suit what is the probability partner holds Y cards in the same suit?
In Table 5 below, each row in Table 4 has been ‘normalised’ by dividing by the row total so each row now sums to 100%. The number of cards held by you (X) is shown in the first column. The number held by partner (Y) is shown in the top row. The corresponding value is P(YX) or the probability of partner holding Y cards if you hold X card in a particular suit.
X/Y  0  1  2  3  4  5  6  7  8  9  10  11  12  13  Total 

0  0.13  1.55  7.42  18.70  27.50  24.75  13.90  4.86  1.04  0.13  0.01  0.00  0.00  0.00  100.00 
1  0.25  2.57  10.59  22.85  28.56  21.65  10.10  2.89  0.49  0.05  0.00  0.00  0.00  –  100.00 
2  0.46  4.12  14.54  26.66  28.06  17.68  6.73  1.53  0.20  0.01  0.00  0.00  –  –  100.00 
3  0.84  6.39  19.17  29.59  25.89  13.32  4.04  0.70  0.07  0.00  0.00  –  –  –  100.00 
4  1.47  9.58  24.21  31.07  22.19  9.08  2.11  0.26  0.02  0.00  –  –  –  –  100.00 
5  2.54  13.90  29.19  30.58  17.37  5.44  0.91  0.07  0.00  –  –  –  –  –  100.00 
6  4.28  19.46  33.36  27.80  12.09  2.72  0.29  0.01  –  –  –  –  –  –  100.00 
7  7.06  26.21  35.74  22.79  7.12  1.03  0.05  –  –  –  –  –  –  –  100.00 
8  11.42  33.76  35.22  16.14  3.23  0.22  –  –  –  –  –  –  –  –  100.00 
9  18.18  41.09  30.82  9.04  0.87  –  –  –  –  –  –  –  –  –  100.00 
10  28.45  46.23  22.19  3.13  –  –  –  –  –  –  –  –  –  –  100.00 
11  43.86  45.61  10.53  –  –  –  –  –  –  –  –  –  –  –  100.00 
12  66.67  33.33  –  –  –  –  –  –  –  –  –  –  –  –  100.00 
13  100.00  –  –  –  –  –  –  –  –  –  –  –  –  –  100.00 
Table 5 Holding X cards in a suit (left column) the percentage probability of partner holding Y cards (top row) in the same suit
So if you hold four Spades there is a 22.19% chance that partner will also hold exactly 4 Spades, and a 9.08% chance of holding exactly five Spades. By accumulating these results we can find the likelihood of a fit of N or more cards.
Holding X cards in a suit what is the probability of a fit of N or more cards in that suit?
Table 6 is just the same data as Table 5 only showing the accumulated total from left to right.
0+  1+  2+  3+  4+  5+  6+  7+  8+  9+  10+  11+  12+  13+  

0  100.00  99.87  98.33  90.91  72.20  44.70  19.94  6.05  1.18  0.14  0.01  0.00  0.00  0.00 
1  –  100.00  99.75  97.18  86.59  63.74  35.18  13.53  3.43  0.54  0.05  0.00  0.00  0.00 
2  –  –  100.00  99.54  95.42  80.88  54.22  26.16  8.48  1.74  0.21  0.01  0.00  0.00 
3  –  –  –  100.00  99.16  92.78  73.61  44.02  18.12  4.81  0.77  0.07  0.00  0.00 
4  –  –  –  –  100.00  98.53  88.94  64.73  33.66  11.46  2.38  0.28  0.02  0.00 
5  –  –  –  –  –  100.00  97.46  83.56  54.37  23.79  6.42  0.98  0.07  0.00 
6  –  –  –  –  –  –  100.00  95.72  76.26  42.91  15.11  3.02  0.30  0.01 
7  –  –  –  –  –  –  –  100.00  92.94  66.73  30.99  8.20  1.08  0.05 
8  –  –  –  –  –  –  –  –  100.00  88.58  54.82  19.60  3.45  0.22 
9  –  –  –  –  –  –  –  –  –  100.00  81.82  40.73  9.91  0.87 
10  –  –  –  –  –  –  –  –  –  –  100.00  71.55  25.32  3.13 
11  –  –  –  –  –  –  –  –  –  –  –  100.00  56.14  10.53 
12  –  –  –  –  –  –  –  –  –  –  –  –  100.00  33.33 
13  –  –  –  –  –  –  –  –  –  –  –  –  –  100.00 
Table 6 Holding X cards in a suit (left column) the percentage probability of an N+ card fit (top row) with partner
As eight or more cards in a suit is the standard for a trump fit we have highlighted the 8+ column. When holding four cards in a suit there is a 33.66% chance that partner will have four or more. With five cards, however, this chance increases to 54.37%. This, in part, explains the attraction of 5card major openings as it is significantly more likely that an eight card fit exists.
Given the partnership holds a combined number of cards in a suit, what is the probability of the various divisions of those cards between the two hands?
This is usually asked when considering the likely holdings of the opponents. For example, we have eight cards in Hearts (say), what is the probability that the five remaining Hearts held by the opponents are divided 32, 41 or 50. Because the opponents’ hands also form a partnership of 26 cards, the same probabilities apply.
There are alternative ways to calculate these divisions which we will examine in a later post on suit holdings. They are included here for completeness and to show that the specific suit distribution data captures all the salient information about the distribution between two hands.




Table 7 Percentage probability of a suit dividing between two hands
So to answer the query above, the opponents five outstanding Hearts will split as follows:
 32: 67.82%
 41: 28.26%
 50: 3.92%
Two Suit Analysis
This section considers the distribution of any two specific suits.
What is the probability of a fit with partner in my two longest 4+ card suits?
This is of some interest when considering using bids that show two suited hands.
The code below uses several of Clojure’s more interesting features including the threading macro (>>), function argument destructuring and reducestyle iteration.
The specific distribution data structure is passed through several steps (functions) to transform it into the desired result. This style of programming is common in functional languages. The various data structure formats between steps are shown as comments.
(def twosuitfits "What is the probability of a fit with partner in my two longest suits with 4 or more cards?" (>> distrtwohandsspecific ; ; ([[s1, h1 d1, c1] [s2, h2, d2, c2] prob], ...) ; (reduce (fn [{:keys [fits tots] :as acc} [d1 d2 prob]] (let [ds (sort #(compare %2 %1) (map vector d1 d2)) p1 (first ds) p2 (second ds) ps [(p1 0) (p2 0)] maxfit (max (apply + p1) (apply + p2))] (if (< (first p2) 4) acc {:fits (update fits [ps maxfit] (fnil + 0.0) prob) :tots (update tots ps (fnil + 0.0) prob)}))) {:fits {} :tots {}}) ; ; {:fits {[[x1 x2] fit] prob, ...} ; :tots {[[x1 x2] totprob], ...}} ; ((fn [{:keys [fits tots]}] (sort (for [[[ps fit] prob] fits] [[ps fit] (* 100.0 (/ prob (tots ps)))])))) ; ; ([[[x1 x2] fit] relative%prob], ...) ; (reduce (fn [{:keys [res lastps lastprob rtot]} [[ps fit] prob]] (if (= ps lastps) {:res (assoc res [ps fit] [prob ( rtot lastprob)]) :lastps ps :lastprob prob :rtot ( rtot lastprob)} {:res (assoc res [ps fit] [prob 100.0]) :lastps ps :lastprob prob :rtot 100.0})) {:res (sortedmap) :lastps [] :lastprob 0.0 :rtot 100.0}) ; ; {:res {[[x1 x2] fit] [relative%prob, reverseaccum%prob], ...} ; :lastps [x1 x2] ; :lastprob <float> ; :rtot <float> ; :res)) ;=> {[[4 4] 4] [0.0021997634521034428 100.0], ; [[4 4] 5] [0.3661172961162857 99.9978002365479], ; [[4 4] 6] [6.949115984745576 99.63168294043162], ; [[4 4] 7] [29.93204349541178 92.68256695568604], ; [[4 4] 8] [38.821054462217894 62.750523460274266], ; [[4 4] 9] [18.871677012414445 23.92946899805637], ; [[4 4] 10] [4.465132976302236 5.057791985641927], ; [[4 4] 11] [0.5584368534484566 0.5926590093396911], ; [[4 4] 12] [0.033506211206907395 0.03422215589123445], ; [[4 4] 13] [7.159446839082796E4 7.159446843270564E4], ; [[5 4] 5] [0.07387275139205572 100.0], ; ...
The results are show in Table 8 below. The numbers in brackets represent the
reverse accumulated totals so they are the probability of an N+ card fit in at least one of the two suits.
Suits  4  5  6  7  8  9  10  11  12  13 

44  0.00 (100.00)  0.37 (100.00)  6.95 (99.63)  29.93 (92.68)  38.82 (62.75)  18.87 (23.93)  4.47 (5.06)  0.56 (0.59)  0.03 (0.03)  0.00 (0.00) 
54  0.07 (100.00)  3.14 (99.93)  21.91 (96.79)  40.18 (74.87)  25.78 (34.69)  7.63 (8.91)  1.18 (1.27)  0.09 (0.09)  0.00 (0.00)  
55  0.01 (100.00)  1.33 (99.99)  15.13 (98.65)  38.99 (83.52)  31.77 (44.54)  10.80 (12.76)  1.81 (1.96)  0.15 (0.15)  0.00 (0.00)  
64  0.76 (100.00)  11.81 (99.24)  35.84 (87.42)  34.16 (51.58)  14.12 (17.42)  2.98 (3.30)  0.31 (0.32)  0.01 (0.01)  
65  0.30 (100.00)  7.55 (99.70)  32.48 (92.16)  38.47 (59.68)  17.21 (21.21)  3.62 (4.00)  0.36 (0.38)  0.01 (0.01)  
66  0.06 (100.00)  3.59 (99.94)  25.23 (96.35)  41.97 (71.12)  23.13 (29.16)  5.43 (6.03)  0.58 (0.60)  0.02 (0.02)  
74  3.46 (100.00)  24.06 (96.54)  39.37 (72.47)  24.63 (33.10)  7.38 (8.48)  1.04 (1.09)  0.05 (0.05)  
75  2.11 (100.00)  20.48 (97.89)  40.97 (77.40)  27.27 (36.43)  8.02 (9.17)  1.10 (1.15)  0.05 (0.05)  
76  0.96 (100.00)  14.95 (99.04)  40.88 (84.09)  32.06 (43.22)  9.78 (11.16)  1.32 (1.38)  0.06 (0.06)  
84  9.17 (100.00)  34.39 (90.83)  36.58 (56.44)  16.40 (19.86)  3.24 (3.47)  0.22 (0.22)  
85  7.40 (100.00)  33.75 (92.60)  38.33 (58.84)  16.99 (20.52)  3.30 (3.53)  0.23 (0.23)  
94  17.39 (100.00)  41.65 (82.61)  31.04 (40.96)  9.06 (9.93)  0.87 (0.87) 
Table 8 Percentage probability of a fit with partner in your two longest 4+ card suits (N+ accumulated total in brackets)
Table 8 shows, for example, that with two 4card suits there is almost a 63% chance that you will have an 8card or greater fit with partner in one of those suits. This rises to 83.5% with two 5 cards suits.
Holding a hand with a 6card and 4card suit is it worth bidding the 4card suit?
When holding a hand with 64 in the longest suits, there is often a debate about whether it is better to rebid the 6card suit (to show 6 cards), eschewing the 4card suit, or whether it is better to introduce the 4card suit at the cost of concealing the 6th card of the longer suit. Of course sometimes it is possible to show both but here we consider the case where it is not.
Assume we conceal the 4card suits and show the 6card suit. Table 6 above shows that we can expect to find an 8+ card fit in that suit 76.26% of the time. On the other hand if we show the 4card suit which means we have shown 54 in two suits, Table 8 shows there is a 74.87% chance that we will have an 8+ card fit in at least one of the two suits.
This suggests that it is marginally better to stick with the 6card suit. This is clearer when the 6card suit is a major suit. However, when the 6card suit is a minor and the 4card suit is major there is a case to reveal the 4card suit, especially with game values, as it is more likely to lead to a game contract.
Full Distribution Analysis
This section considers the full distribution of each hand.
What is partner’s most likely distribution given my distribution?
We know from the earlier post that there are 560 specific and 39 generic suit distributions for a single hand. So simplistically there are up to 39 x 560 = 21,840 ways to consider the distribution options for two hands. Clearly some are invalid. The function below returns the most likely distribution of partner’s hand and its probability given a particular distribution in your hand.
(defn partnerdistrprob "Return a list of partner's most likely suit distribution and their percentage probabilities given your distribution. Limit the response to 'n' distributions." [sd d n] (let [dall (filter #(= d (first %)) sd) totp (apply + (map last dall)) ds (sortby (fn [[d1 d2 prob]] [prob d2]) #(compare %2 %1) dall)] (for [[d1 d2 prob] (take n ds)] [d2 (* 100.0 (/ prob totp))]))) (partnerdistrprob distrtwohandsspecific [4 4 3 2] 10) ;=> ([[3 3 3 4] 3.44007589760525] ; [[3 3 4 3] 3.010066410404594] ; [[4 3 3 3] 2.580056923203937] ; [[3 4 3 3] 2.580056923203937] ; [[3 2 4 4] 2.580056923203937] ; [[2 3 4 4] 2.580056923203937] ; [[4 2 3 4] 2.211477362746232] ; [[2 4 3 4] 2.211477362746232] ; [[3 2 3 5] 2.06404553856315] ; [[2 3 3 5] 2.06404553856315])
Table 9 below shows some results for a few of the more common distributions.




Table 9 Some percentage probabilities of partner’s suit distribution given your distribution
All of these results have been derived from the specific suit distribution data generated at the beginning of this section. Many other results are possible. The examples above are a guide to anyone wanting to calculate their own specific twohand distribution probabilities.
HCP Distribution
Let’s move from suit distributions to High Card Points (HCP). Recall from the first blog that HCP are assigned to honour cards as follows: A=4, K=3, Q=2 and J=1. The hand HCP are the sum of the HCP of each honour card in the hand, and is a measure of the ‘strength’ (trick taking potential) of the hand.
Like suit distributions, we can take two views of HCP holdings, either from the combined 26 cards that make up the two hands or from two separate 13card hands.
HCP Holdings of Combined Hands (26cards analysis)
Starting with the combined 26card view, the HCP distribution can be computed using a simple modification to the single hand code. For two combined hands, the number of nonhonour cards (Xs) is determined by subtracting the number of honour cards from 26, instead of 13, and the denominator is C(52,26) instead of C(52,13). This leads to the following formula:
C(4,a)C(4,k)C(4,q)C(4,j)C(36,(26(a+k+q+j))) / C(52,26) 
where a,k,q,j = number of A,K,Q and J honour cards held respecively. 
Iterating through all the possible honour combinations allows the formula above to be used to calculate the probability for each case. Aggregating these by HCP, we can calculate the total probability of each HCP value as shown in the following code:
"Return a map of HCP percentage probabilities for two hands combined" (def hcpprobcombined (let [c5226 (comb 52 26) plst (for [a (range 5) k (range 5) q (range 5) j (range 5)] (let [hcp (+ (* 4 a) (* 3 k) (* 2 q) (* 1 j)) xs ( 26 (+ a k q j)) cs (* (comb 4 a) (comb 4 k) (comb 4 q) (comb 4 j) (comb 36 xs)) prob (/ cs c5226)] [hcp prob]))] (reduce (fn [acc [h p]] (update acc h (fnil + 0.0) (* 100.0 p))) (sortedmap) plst))) ;=> {0 5.125576866202734E5, ; 1 4.8459999462280393E4, ; 2 0.001998974977819066, ; 3 0.0063867794163108005, ; 4 0.017985893298594256, ; ... (apply + (map val hcpprobcombined)) ;=> 100.0
The full results are shown in Table 10 below and can be downloaded here in csv format.
HCP  ExactlyN Prob (%)  Norless Prob (%)  Normore Prob (%) 

0  0.00  0.00  100.00 
1  0.00  0.00  100.00 
2  0.00  0.00  100.00 
3  0.01  0.01  100.00 
4  0.02  0.03  99.99 
5  0.04  0.07  99.97 
6  0.09  0.16  99.93 
7  0.19  0.35  99.84 
8  0.34  0.69  99.65 
9  0.59  1.28  99.31 
10  0.95  2.23  98.72 
11  1.46  3.69  97.77 
12  2.12  5.82  96.31 
13  2.94  8.76  94.18 
14  3.88  12.65  91.24 
15  4.89  17.54  87.35 
16  5.91  23.44  82.46 
17  6.83  30.28  76.56 
18  7.57  37.84  69.72 
19  8.05  45.89  62.16 
20  8.22  54.11  54.11 
21  8.05  62.16  45.89 
22  7.57  69.72  37.84 
23  6.83  76.56  30.28 
24  5.91  82.46  23.44 
25  4.89  87.35  17.54 
26  3.88  91.24  12.65 
27  2.94  94.18  8.76 
28  2.12  96.31  5.82 
29  1.46  97.77  3.69 
30  0.95  98.72  2.23 
31  0.59  99.31  1.28 
32  0.34  99.65  0.69 
33  0.19  99.84  0.35 
34  0.09  99.93  0.16 
35  0.04  99.97  0.07 
36  0.02  99.99  0.03 
37  0.01  100.00  0.01 
38  0.00  100.00  0.00 
39  0.00  100.00  0.00 
40  0.00  100.00  0.00 
Total  100.00 
Table 10 HCP percentage probability of two combined hands
Unlike the single hand HCP table this table is symmetric about 20 HCP. This makes sense as you and your partner will split the points with the opponents. Any points you have the opponents won’t have and vice versa.
If we take a combined holding of 25 HCP as a requirement for ‘game’ then you and your partner can expect to hold a game hand about 17.5% of the time. Of course other factors need to be considered such as distribution, vulnerability, secondary fits and the opponents’ skill level.
Many players will bid game, especially vulnerable, on lighter values which increases the likelihood to nearer 25%, or, 50% if you count the opponents. So it is likely game contracts will be played about half of the time at competitive tables.
HCP Holding of Two Separate Hands (2 x 13cards)
Taking the view of two separate 13card hands, we can modify the above approach by considering each hand separately. The probability equation becomes:
C(4,a1)C(4,k1)C(4,q1)C(4,j1)C(36,x1)C(4a1,a2)C(4k1,k2)C(4q1,q2)C(4j1,j2)C(36x1,x2) 
————————————————————————– 
C(52,13)C(39,13) 
where x1 = 13(a1+k1+q1+j1) when >= 0 
and x2 = 13(a2+k2+q2+j2) when >= 0 
Iterating over each possible honour combination, noting the second hand can only select from the remaining honour cards, and aggregating the probability results by HCP values provides the result. This operation is performed by the following code.
"Calculate a map of HCP percentage probabilities for two separate hands" (def hcpprobseparate (let [c5213c3913 (* (comb 52 13) (comb 39 13)) plst (for [a1 (range 5) a2 (range ( 5 a1)) k1 (range 5) k2 (range ( 5 k1)) q1 (range 5) q2 (range ( 5 q1)) j1 (range 5) j2 (range ( 5 j1)) :let [x1 ( 13 (+ a1 k1 q1 j1)) x2 ( 13 (+ a2 k2 q2 j2))] :when (and (not (neg? x1)) (not (neg? x2)))] (let [hcp1 (+ (* 4 a1) (* 3 k1) (* 2 q1) (* 1 j1)) hcp2 (+ (* 4 a2) (* 3 k2) (* 2 q2) (* 1 j2)) cs (* (comb 4 a1) (comb 4 k1) (comb 4 q1) (comb 4 j1) (comb 36 x1) (comb ( 4 a1) a2) (comb ( 4 k1) k2) (comb ( 4 q1) q2) (comb ( 4 j1) j2) (comb ( 36 x1) x2)) prob (/ cs c5213c3913)] [[hcp1 hcp2] prob]))] (reduce (fn [acc [h p]] (update acc h (fnil + 0.0) (* 100.0 p))) (sortedmap) plst))) ;=> {[0 0] 5.125576866202734E5, ; [0 1] 2.4229999731140202E4, ; [0 2] 6.05749993278505E4, ; [0 3] 0.0014165230612051191, ; ... ; [12 10] 0.7965990398621553, ; [12 11] 0.7293034947719456, ; [12 12] 0.6226706646156763, ; [12 13] 0.505656851922869, ; ... (apply + (map val hcpprobseparate)) ;=> 100.00000000000006 (count hcpprobseparate) ;=> 849
A portion of the result is show in Table 11 below. The full results are here in csv format.
X/Y  8  9  10  11  12  13  14  15  16  17  18 

0  0.0166  0.0214  0.0262  0.0300  0.0325  0.0336  0.0329  0.0305  0.0271  0.0228  0.0183 
1  0.0394  0.0498  0.0597  0.0667  0.0712  0.0722  0.0696  0.0634  0.0556  0.0461  0.0364 
2  0.0740  0.0917  0.1073  0.1183  0.1237  0.1233  0.1169  0.1047  0.0902  0.0737  0.0573 
3  0.1458  0.1766  0.2042  0.2212  0.2265  0.2220  0.2073  0.1819  0.1538  0.1236  0.0942 
4  0.2451  0.2934  0.3328  0.3548  0.3576  0.3441  0.3148  0.2711  0.2247  0.1763  0.1314 
5  0.3555  0.4165  0.4637  0.4871  0.4811  0.4542  0.4085  0.3458  0.2803  0.2159  0.1580 
6  0.4801  0.5516  0.6040  0.6231  0.6035  0.5593  0.4943  0.4094  0.3255  0.2457  0.1758 
7  0.6259  0.7079  0.7610  0.7704  0.7325  0.6662  0.5754  0.4669  0.3629  0.2671  0.1860 
8  0.7354  0.8158  0.8602  0.8556  0.7982  0.7098  0.6009  0.4772  0.3619  0.2597  0.1765 
9  0.8158  0.8871  0.9184  0.8969  0.8180  0.7131  0.5912  0.4583  0.3392  0.2377  0.1570 
10  0.8602  0.9184  0.9330  0.8910  0.7966  0.6797  0.5498  0.4157  0.3003  0.2044  0.1307 
11  0.8556  0.8969  0.8910  0.8335  0.7293  0.6069  0.4784  0.3526  0.2472  0.1627  0.1009 
12  0.7982  0.8180  0.7966  0.7293  0.6227  0.5057  0.3889  0.2786  0.1892  0.1211  0.0722 
13  0.7098  0.7131  0.6797  0.6069  0.5057  0.4006  0.2992  0.2075  0.1370  0.0843  0.0482 
14  0.6009  0.5912  0.5498  0.4784  0.3889  0.2992  0.2163  0.1456  0.0924  0.0545  0.0298 
15  0.4772  0.4583  0.4157  0.3526  0.2786  0.2075  0.1456  0.0942  0.0574  0.0324  0.0169 
16  0.3619  0.3392  0.3003  0.2472  0.1892  0.1370  0.0924  0.0574  0.0335  0.0180  0.0088 
17  0.2597  0.2377  0.2044  0.1627  0.1211  0.0843  0.0545  0.0324  0.0180  0.0090  0.0041 
18  0.1765  0.1570  0.1307  0.1009  0.0722  0.0482  0.0298  0.0169  0.0088  0.0041  0.0017 
19  0.1126  0.0971  0.0785  0.0583  0.0401  0.0257  0.0151  0.0080  0.0039  0.0017  0.0006 
20  0.0684  0.0573  0.0446  0.0317  0.0209  0.0127  0.0070  0.0035  0.0016  0.0006  0.0002 
21  0.0389  0.0314  0.0234  0.0159  0.0100  0.0057  0.0029  0.0013  0.0005  0.0002  0.0000 
22  0.0206  0.0160  0.0114  0.0074  0.0043  0.0023  0.0011  0.0004  0.0002  0.0000  0.0000 
23  0.0103  0.0076  0.0052  0.0031  0.0017  0.0008  0.0003  0.0001  0.0000  0.0000  – 
24  0.0047  0.0033  0.0021  0.0012  0.0006  0.0003  0.0001  0.0000  0.0000  –  – 
Table 11 Portion of HCP percentage probability for two separate hands
So, for example, the probably of holding exactly 13 HCP and partner holding exactly 10 HCP is 0.6797%.
Perhaps a more interesting way to represent this data is to pose the question:
Holding X HCP, what is the probability partner holds Y HCP?
We can answer this by simply normalising each row in the above table so that the total adds to 100% by dividing each value by the row sum. Table 12 below shows a portion of this result and includes ‘Normore’ in brackets as an accumulated value.
X/Y  8  9  10  11  12  13  14  15  16  17  18 

0  4.55 (91.70)  5.88 (87.15)  7.19 (81.27)  8.24 (74.08)  8.94 (65.85)  9.23 (56.91)  9.04 (47.68)  8.39 (38.64)  7.44 (30.25)  6.28 (22.81)  5.02 (16.53) 
1  4.99 (90.17)  6.32 (85.17)  7.57 (78.85)  8.46 (71.29)  9.03 (62.82)  9.16 (53.80)  8.83 (44.64)  8.04 (35.81)  7.05 (27.77)  5.85 (20.73)  4.62 (14.88) 
2  5.45 (88.68)  6.76 (83.22)  7.91 (76.46)  8.73 (68.55)  9.12 (59.82)  9.09 (50.70)  8.62 (41.61)  7.72 (32.99)  6.65 (25.27)  5.43 (18.62)  4.23 (13.19) 
3  5.92 (87.16)  7.17 (81.24)  8.29 (74.07)  8.98 (65.78)  9.20 (56.80)  9.02 (47.60)  8.42 (38.58)  7.39 (30.16)  6.24 (22.77)  5.02 (16.53)  3.82 (11.51) 
4  6.37 (85.65)  7.63 (79.27)  8.66 (71.64)  9.23 (62.99)  9.30 (53.76)  8.95 (44.46)  8.19 (35.51)  7.05 (27.33)  5.84 (20.28)  4.58 (14.43)  3.42 (9.85) 
5  6.86 (83.83)  8.03 (76.97)  8.94 (68.94)  9.39 (60.00)  9.28 (50.61)  8.76 (41.33)  7.88 (32.58)  6.67 (24.70)  5.40 (18.03)  4.16 (12.63)  3.05 (8.46) 
6  7.32 (81.89)  8.42 (74.56)  9.22 (66.15)  9.51 (56.93)  9.21 (47.42)  8.53 (38.22)  7.54 (29.68)  6.25 (22.14)  4.97 (15.89)  3.75 (10.93)  2.68 (7.18) 
7  7.80 (79.90)  8.82 (72.10)  9.48 (63.28)  9.60 (53.80)  9.12 (44.21)  8.30 (35.08)  7.17 (26.78)  5.82 (19.62)  4.52 (13.80)  3.33 (9.28)  2.32 (5.95) 
8  8.27 (77.71)  9.17 (69.44)  9.67 (60.26)  9.62 (50.59)  8.98 (40.97)  7.98 (31.99)  6.76 (24.01)  5.37 (17.25)  4.07 (11.88)  2.92 (7.81)  1.98 (4.89) 
9  8.72 (75.32)  9.48 (66.60)  9.82 (57.12)  9.59 (47.30)  8.74 (37.72)  7.62 (28.98)  6.32 (21.35)  4.90 (15.04)  3.63 (10.14)  2.54 (6.51)  1.68 (3.97) 
10  9.15 (72.79)  9.77 (63.65)  9.92 (53.88)  9.47 (43.96)  8.47 (34.49)  7.23 (26.02)  5.85 (18.79)  4.42 (12.94)  3.19 (8.52)  2.17 (5.33)  1.39 (3.16) 
11  9.57 (70.13)  10.03 (60.57)  9.96 (50.54)  9.32 (40.58)  8.15 (31.26)  6.78 (23.11)  5.35 (16.32)  3.94 (10.97)  2.76 (7.03)  1.82 (4.27)  1.13 (2.45) 
12  9.94 (67.25)  10.19 (57.31)  9.92 (47.12)  9.09 (37.19)  7.76 (28.11)  6.30 (20.35)  4.85 (14.05)  3.47 (9.21)  2.36 (5.74)  1.51 (3.38)  0.90 (1.87) 
13  10.27 (64.21)  10.31 (53.94)  9.83 (43.63)  8.78 (33.80)  7.31 (25.02)  5.79 (17.71)  4.33 (11.91)  3.00 (7.59)  1.98 (4.58)  1.22 (2.60)  0.70 (1.38) 
14  10.55 (61.01)  10.38 (50.46)  9.66 (40.07)  8.40 (30.42)  6.83 (22.01)  5.26 (15.18)  3.80 (9.93)  2.56 (6.13)  1.62 (3.57)  0.96 (1.95)  0.52 (0.99) 
15  10.79 (57.64)  10.36 (46.85)  9.40 (36.49)  7.97 (27.10)  6.30 (19.12)  4.69 (12.83)  3.29 (8.14)  2.13 (4.85)  1.30 (2.72)  0.73 (1.42)  0.38 (0.69) 
16  10.93 (54.09)  10.24 (43.16)  9.07 (32.92)  7.47 (23.85)  5.72 (16.39)  4.14 (10.67)  2.79 (6.53)  1.73 (3.74)  1.01 (2.01)  0.54 (1.00)  0.26 (0.45) 
17  11.00 (50.41)  10.06 (39.41)  8.65 (29.35)  6.89 (20.69)  5.13 (13.80)  3.57 (8.68)  2.31 (5.11)  1.37 (2.80)  0.76 (1.43)  0.38 (0.66)  0.17 (0.28) 
18  11.00 (46.59)  9.78 (35.59)  8.14 (25.81)  6.29 (17.67)  4.50 (11.38)  3.00 (6.88)  1.86 (3.88)  1.05 (2.02)  0.55 (0.96)  0.26 (0.42)  0.11 (0.16) 
19  10.87 (42.64)  9.37 (31.77)  7.58 (22.40)  5.62 (14.82)  3.87 (9.20)  2.48 (5.33)  1.46 (2.86)  0.77 (1.40)  0.38 (0.62)  0.16 (0.25)  0.06 (0.08) 
20  10.63 (38.58)  8.90 (27.96)  6.92 (19.06)  4.92 (12.13)  3.25 (7.21)  1.98 (3.97)  1.08 (1.99)  0.54 (0.91)  0.24 (0.37)  0.09 (0.13)  0.03 (0.04) 
21  10.29 (34.48)  8.30 (24.19)  6.20 (15.88)  4.21 (9.68)  2.65 (5.47)  1.50 (2.82)  0.77 (1.32)  0.36 (0.55)  0.14 (0.20)  0.05 (0.06)  0.01 (0.01) 
22  9.82 (30.32)  7.60 (20.50)  5.42 (12.91)  3.51 (7.49)  2.06 (3.98)  1.09 (1.92)  0.52 (0.82)  0.21 (0.30)  0.07 (0.09)  0.02 (0.02)  0.00 (0.00) 
23  9.18 (26.18)  6.81 (17.00)  4.64 (10.18)  2.80 (5.54)  1.54 (2.74)  0.76 (1.21)  0.31 (0.45)  0.11 (0.14)  0.03 (0.03)  0.00 (0.00)  – 
24  8.44 (22.06)  5.97 (13.62)  3.77 (7.66)  2.12 (3.88)  1.08 (1.76)  0.46 (0.68)  0.17 (0.22)  0.05 (0.05)  0.01 (0.01)  –  – 
Table 12 Portion of percentage probability of partner holding Y HCP (top row) given you hold X HCP (left column). Bracketed values are Normore accumulations
So if you hold 16 HCP, say, the probability that partner has:
 Exactly 8 HCP is 10.93%
 8 or more HCP is 54.09%
Given the partnership holds a combined number of HCP, what is the probability of the various distributions of those HCP between the two hands?
This is analogous to the distribution of cards in a particular suit between two hands shown in Table 7 above.
The following code uses the hcpprobseparate HCP data generated earlier to determine the probability of the split of given combined HCP holdings.
"If two hands hold a specific combined HCP count, what is the probability of the distribution of those HCP between the two hands" (def HCPsplit (let [res (reduce (fn [acc [[h1 h2] p]] (update acc [(+ h1 h2) [h1 h2]] (fnil + 0.0) p)) {} hcpprobseparate) tots (reduce (fn [acc [[h _] p]] (update acc h (fnil + 0.0) p)) {} res) res (reduce (fn [acc [[a b] p]] (associn acc [a b] (* 100.0 (/ p (tots a))))) {} res)] (into (sortedmap) ; tidy up result for display (for [[k v] res] [k (into (sortedmap) v)])))) ;=> {0 {[0 0] 100.0}, ; 1 {[0 1] 50.0, ; [1 0] 50.0}, ; 2 {[0 2] 30.303030303030305, ; [1 1] 39.393939393939384, ; [2 0] 30.303030303030305}, ; 3 {[0 3] 22.178988326848252, ; [1 2] 27.821011673151748, ; [2 1] 27.821011673151748, ; [3 0] 22.178988326848252}, ; 4 {[0 4] 15.79960275848456, ; [1 3] 23.062213942930455, ; [2 2] 22.276366597169968, ; [3 1] 23.062213942930455, ; [4 0] 15.79960275848456}, ; ...
Table 13 below shows a few examples of the HCP distribution, the full table can be downloaded in csv format here. The distribution of HCP is similar to that for cards in given suit.




Table 13 Some percentage probabilities of HCP dividing between two hands
As an example of how this might be useful, consider playing in 4 Hearts with the following hands after an uncontested auction:
Left hand opponent (West) leads a small Club to East’s King. East continues with the Club Ace and then switches to a low Diamond. Should you play the King or Jack?
Clearly if the two missing Diamond honours are with either East or West it will not matter. You will either make the contract or not depending on who holds them. However, if they are split, the contract depends on whether the Ace is with East or West (note low from Axxx is routine for good players in this situation).
The opponents have 14 HCP between them. East has shown up with seven (Club Ace and King) so far. If East also has the Diamond Ace (and West the Queen), the HCP split would be 311 or 212, depending on who holds the Heart Jack, compared with a 410 or 59 split if West has the Diamond Ace (and East the Queen). From the table above the latter splits are about twice as likely as the former. This makes playing the Diamond Jack a much better prospect than the King.
Interestingly, while Bridge literature regularly discusses suit division and its relative probabilities to guide play, discussion about HCP division is largely nonexistent (at least in my experience).
UPDATE: The example and note above are wrong as pointed out by Phil R (see comments below). It is based on flawed reasoning. Please ignore it.
Suit and HCP Distribution
In the previous blog we consider the combination of suit distribution and HCP holdings for a single hand. While it is possible to calculate these probabilities for two hands, the calculation and result set is significantly larger. The following illustrative and nonoptimised code calculates a point solution for a given suit distribution and HCP holding for each hand.
(defn distrHCPtwohands "Calculate the probability of: Hand A holding d1 suit distribution and h1 HCP, and, Hand B holding d2 suit distribution and h2 HCP where d1, d2 are vectors of the suits' length (eg. [4 2 3 4])" [d1 d2 h1 h2] (let [c5213c3913 (* (comb 52 13) (comb 39 13)) z [[0 0] [0 1] [1 0]] ; possible honour holding of the two hands ps (for [[sa1 sa2] z, [sk1 sk2] z, [sq1 sq2] z, [sj1 sj2] z, [ha1 ha2] z, [hk1 hk2] z, [hq1 hq2] z, [hj1 hj2] z, [da1 da2] z, [dk1 dk2] z, [dq1 dq2] z, [dj1 dj2] z, [ca1 ca2] z, [ck1 ck2] z, [cq1 cq2] z, [cj1 cj2] z :let [sx1 ( (d1 0) (+ sa1 sk1 sq1 sj1)) hx1 ( (d1 1) (+ ha1 hk1 hq1 hj1)) dx1 ( (d1 2) (+ da1 dk1 dq1 dj1)) cx1 ( (d1 3) (+ ca1 ck1 cq1 cj1)) sx2 ( (d2 0) (+ sa2 sk2 sq2 sj2)) hx2 ( (d2 1) (+ ha2 hk2 hq2 hj2)) dx2 ( (d2 2) (+ da2 dk2 dq2 dj2)) cx2 ( (d2 3) (+ ca2 ck2 cq2 cj2)) hcp1 (+ (* 4 (+ sa1 ha1 da1 ca1)) (* 3 (+ sk1 hk1 dk1 ck1)) (* 2 (+ sq1 hq1 dq1 cq1)) (* 1 (+ sj1 hj1 dj1 cj1))) hcp2 (+ (* 4 (+ sa2 ha2 da2 ca2)) (* 3 (+ sk2 hk2 dk2 ck2)) (* 2 (+ sq2 hq2 dq2 cq2)) (* 1 (+ sj2 hj2 dj2 cj2)))] :when (and (= hcp1 h1) (= hcp2 h2) (notany? neg? [sx1 hx1 dx1 cx1]) (notany? neg? [sx2 hx2 dx2 cx2]))] (* (comb 9 sx1) (comb 9 hx1) (comb 9 dx1) (comb 9 cx1) (comb ( 9 sx1) sx2) (comb ( 9 hx1) hx2) (comb ( 9 dx1) dx2) (comb ( 9 cx1) cx2)))] (double (/ (apply + ps) c5213c3913)))) (distrHCPtwohands [4 4 3 2] [3 2 3 5] 12 10) ;=> 2.852657421381616E6
The code runs for about a minute on my laptop. This can be significantly reduced by using honour indexes and precalculated vectors of values similar to the first blog, but it is still a sizeable calculation.
An alternative approach is to approximate the result by treating the suit distribution and HCP holding as independent variables (which strictly they are not). This approximation is reasonable for more common holdings but fails for more extreme distributions and HCP holdings. From probability theory:
P(Distr and HCP) = P(Distr) x P(HCPDistr) = P(HCP) x P(DistrHCP) 
where P(AB) is the probability of A given that B is true 
Using the approximation of independent variables we get:
P(Distr and HCP) ~= P(Distr) x P(HCP) 
For example, consider the two hands:
 Hand A: 4432 suit distribution and 12 HCP
 Hand B: 3235 suit distribution and 10 HCP
The probabilities are:
 Estimate = 3.706883995099E4 x 0.007965990398622 = 2.9529002313764E6
 Actual = 2.852657421381616E6
 Error = 3.5140%
Other common cases typically yield errors in the 35% range.
Next Article
This article has focused on the probability of various attributes of two hands that form a Bridge partnership. The next post will look at individual suit combinations and plays.
Table 13 below shows a few examples of the HCP distribution, the full table can be downloaded in csv format here. The distribution of HCP is similar to that for cards in given suit. When I downloaded this CSV I got: a file that showed 120 to be :
0.032536 You example shows the probability to be 1.53%.
Am I misinterpreting the file or is it possible that the wrong file downloaded. I love your work and totally agree that not enough has been published about the distribution of HCP.
Thanks William, I had the wrong link (repeated the Table 11 link by mistake). Fixed now.
Your quote here is, unfortunately, faulty reasoning:
“The opponents have 14 HCP between them. East has shown up with seven (Club Ace and King) so far. If East also has the Diamond Ace (and West the Queen), the HCP split would be 311 or 212, depending on who holds the Heart Jack, compared with a 410 or 59 split if West has the Diamond Ace (and East the Queen). From the table above the latter splits are about twice as likely as the former. This makes playing the Diamond Jack a much better prospect than the King.”
This analysis is not accurate because HCP allocation is dependent on suit distribution. The fastest way to see this on the deal you give is to imagine that East holds a singleton diamond (a 61 split is certainly possible). If this is so, then both diamond honours must be with West, and your attempt to use HCPbalances as inference would be bizarre. If East holds a doubleton diamond, then he has either underled Qx or Ax or (far more likely), West holds both honours.
In terms of the play, West holding both honours is irrelevant, but the fact remains that one needs to consider the likely layouts of the diamond suit before one considers HCP, and those layouts constrain the sets of possible cases. It is not correct to use the distributionagnostic HCP probability distribution table in such cases. I’m afraid to report that this is why,
“while Bridge literature regularly discusses suit division and its relative probabilities to guide play, discussion about HCP division is largely nonexistent (at least in my experience).”
The article is otherwise very thorough, useful, and interesting. Thank you for publishing it.
Hi Phil R,
Thanks for pointing out this error. The example after Table 13 is indeed wrong. The distribution of honours (i.e. HCPs) in one suit does not affect those in another. So the fact that East (in the example) has both the Ace and King of Clubs does not make it less likely that East also holds the Diamond Ace. I’ve “struckthough” the example and the following note.
Thanks again for your astute observation and my apologies to any readers who were misled by this flawed example (and the faulty reasoning behind it).