## Name

deal — compute and display deal probabilities

## Synopsis

`deal` [-h ] [-b `base`] [-t `turns`] [-c `columns`] [-g ] [-w ] `specials` `total`

## DESCRIPTION

This program prints out tables of non-replacement draw probabilities, rounded to the nearest percent.

Suppose I have M special cards in my deck and N total cards in my deck, and I draw k cards from that deck without replacement. Let X count the number of special cards contained in those k drawn cards.

Then X has a hypergeometric distribution, with the following formula for probabilities:

B(M, i) * B(N-M, k-i)
P(X = i) = ---------------------
B(N, k)

where B(a,b) is the binomial coefficient (read "a choose b"), and is the number of ways to choose b objects out of a possible objects. The formula for the binomial coefficient is:

B(n,m) = n!/(m! * (n-m)!)

where n! is the factorial function n! = 1 * 2 * 3 * ... * n.

This program prints out tables of these probabilities. The `specials' and `total' arguments specify M and N. The table displays values for ranges of k and i.

In the table output, a dot designates a probability less than .5% that rounds to zero. Impossible outcomes are blank.

The program accepts the following options to control its output:

`-b base`

Number of cards to assume in the initial hand. Note: this defaults to 7, not to 0!

`-g`

Normally, the program displays the probability that you will have exactly a given number of specials. With this option, it displays the odds that you will have the given number of specials or more. This option also forces `-w` on, to accomodate 100% probabilities which will show up in column 0 if nowhere else.

`-w`

Force wide display (3 chars per percentage) to accommodate 100% probabilities.

`-c columns`

Number of table columns to generate in the report. Defaults to the number of specials plus one additional to accommodate the zero column.

`-h`

`-t draws`

Set number of draws to display probabilities for (default to 20 or the total number of cards, whichever is less)

`-v`

Verbose. Log the computation steps for each hypergeometricoefficient to standard error. Use this for debugging if you are a trained numerical analyst (kids, don't try this yourselves at home!).

`-B`

Binomial coefficient test. Compute and print the binomial coefficient B(n, k) or `n choose k'.

`-G`

Gamma function test. Compute and display the log of the gamma function of the argument. If `-v` tells you that the computation of B(n, k) is blowing up, this will enable you to probe the local lgamma function.

`-H`

Compute the hypergeometric probability H(i, k, M, N) with arguments supplied from the command line. For debugging.

## EXAMPLES

To compute the probabilities for drawing your 3 Hurloon Minotaurs during the first 20 turns from a 62-card "Magic: The Gathering" deck (MtG starts you with 7 cards):

deal 3 62

To compute your chances of having the 4 aces on the nth draw in 5-card draw poker:

deal `-b` 5 4 52

## BUGS

The `-w` and `-g` options widen the column width of the tables to accommodate 100% probabilities, at the cost of making the table too wide to display on an 80-column terminal when the number of specials is more than 17. When wide display is off, on the other hand, 23 specials will fit in 80 colums, but 100% probabilities can mess up the table formatting.

## AUTHOR

Eric S. Raymond . Based on the `cardprobs' program by Jeremy York. See my home page at http://www.catb.org/~esr for updates and other resources.