### Chance of A♠

```
handsWithAs = {A*s};
```

handsWithAs.Count() / AllHands.Count();

```
Output: 0.25
```

{A*s} creates a set of hands that contain the A♠ and any number of additional spades. Dividing the number of hands in {A*s} by the total number of possible hands gives the chance that any given hand is contained within {A*s}. This means that 25% of all hands contain A♠.

### Chance of being dealt a certain number of cards in a suit

```
handsMinFiveSpades = {xxxxx*s};
```

handsMinFiveSpades.Count() / AllHands.Count();

```
Output: 0.17634
```

{xxxxx*s} creates a set of hands that contain at least 5 spades This shows that ~17.6% of all hands contain at least five spades.

### More complex hand descriptions

```
handSet = {AQx*!Jc 0h (Ax|xxxx)s};
```

handSet.Count() / AllHands.Count();

```
Output: 0.0002
```

There is a lot of flexibility in defining sets of hands. The above handSet contains all the hands with at least 3 clubs(including A♣, Q♣ but explicitly excluding J♣ and implicitly exlcuding K♣) and 0 hearts and either A♠ and exactly one additional spade or exactly four spades. See HandSet for a complete description of creating HandSets.

### Set operations

```
handSet = {xxxxx*s xxxxx*c}
```

.Union({xxxxx*s xxxxx*d})

.Union({xxxxx*s xxxxx*h});

handSet.Count() / AllHands.Count();

```
Output: 0.02808
```

You may use standard set operations (Intersect, Union, Subtract, Complement) on sets of hands. Here set Union is used to create the set of hands that contain at least 5 spades and at least 5 cards in a side suit.

### Taking into account your hand on other player's hands

```
myhand = [93c QT8d KQT9h AQ43s];
```

westHands = AllHands.RemoveCards(myhand);

westHands.Intersect({$K*s}).Count() / westHands.Count();

```
Output: 0.33333
```

Another player cannot have hands that contains cards that we own. RemoveCards removes all hands from a set that contain the cards we already have.

### Taking into account a player's bid

```
StandardBid0.Intersect({A*s}).Count() / StandardBid0.Count()
```

```
Output: 0
```

```
StandardBid3.Intersect({A*s}).Count() / StandardBid3.Count()
```

```
Output: 0.26685
```

```
StandardBid6.Intersect({A*s}).Count() / StandardBid6.Count()
```

```
Output: 0.58608
```

The StandardBids are HandSets that contain all the hands that will result in a given bid. This is of course an estimate. See the documentation for the assumptions made to produce these bids. The above examples shows the probability a player has the A♠ for various bids.

### Deals

```
myhand = {63c AK8532d 862h 74s};
```

min2Diamonds = {xx*d};

DealSet(myhand, min2Diamonds, min2Diamonds, AllHands).Count() / DealSet(myhand, AllHands, AllHands, AllHands).Count();

```
Output: 0.54244
```

If you want to calculate probabilities that are dependent on the hands of multiple players use a DealSet. A DealSet contains four HandSets representing the hands of each player in a deal. The above example shows the probability (~54%) that both of your opponents have at least two diamaonds and that you will be able to safely play A♦ and K♦ without your opponents being able to trump.