Probability of Drawing a Full House

Calculating the probability of drawing a full house

Julia
Probability
Published

March 29, 2024

I recently saw someone mention that they received an interview question for a DS position in which they were asked to calculate the probability of drawing a full house when drawing 5 cards from a standard 52-card deck.

So let’s solve that in Julia.

Solving analytically

The function we want is `binomial(n::Integer, k::Integer)`, which returns the binomial coefficient – the number of ways to choose `k` out of `n` items.

Let’s look at some examples. First, if we try 4C1 (4 choose 1), we expect to just get 4 – there are 4 different ways to choose 1 item from a group of 4 items.

Code
``binomial(4, 1)``
``4``

Now imagine we choose 2 different items from a group of 4. We expect to get 6 (assuming we don’t care about order, i.e. that 1,2 is the same as 2,1):

1. 1, 2
2. 1, 3
3. 1, 4
4. 2, 3
5. 2, 4
6. 3, 4
Code
``binomial(4, 2)``
``6``

So let’s solve the actual problem now. A full house is 5 cards comprising 3-of-a-kind and a pair. There are 52 cards in a deck – 4 suits comprising 13 unique values (2, 3, …, Ace) each.

The approach here is to calculate the number of ways to get a full house and divide that by the number of ways to draw 5 cards from a deck. We can start with the number of ways to draw 5 cards from a deck (the denominator) first, since it’s the most straightforward:

Code
``denom = binomial(52, 5)``
``2598960``

Then let’s calculate the number of ways we can get three of a kind. There are 13 different card values and 4 different suits. We need to choose 1 value with 3 different suits:

• `binomial(13, 1)` gives us the number of ways to choose 1 value from 13 options (which is just 13)
• `binomial(4, 3)` gives us the number of ways to choose 3 different suits from 4 possible options

And then since this is probability, we multiply everything together:

Code
``three_kind = binomial(13, 1) * binomial(4, 3)``
``52``

Then we do the same thing for drawing a pair. There are now 12 different card values (we can’t get a pair of the value that we already drew three-of-a-kind for), and we need to choose 1 value with 2 different suits:

Code
``two_kind = binomial(12, 1) * binomial(4, 2)``
``72``

And from here, we can estimate the probability of a full house by multiplying and dividing:

Code
``(three_kind * two_kind) / denom``
``0.0014405762304921968``

So there’s a 0.144% chance of drawing a full house from a typical 52-card deck.

Solving with simulation

We could also take a simulation-approach to solving this. First, let’s create a deck of cards.

Code
``````using Random
using StatsBase

Random.seed!(0408)

deck = collect(repeat(1:13, 4))``````
``````52-element Vector{Int64}:
1
2
3
4
5
6
7
8
9
10
11
12
13
⋮
2
3
4
5
6
7
8
9
10
11
12
13``````

Then we’ll create a few functions to help us with the simulation:

1. `make_hands()` will draw `n` 5-card hands from the deck;
2. `is_full_house()` will check whether any given hand is a full house;
3. `count_full_house()` takes a vector of hands and counts the number of them that have a full house
Code
``````function make_hands(deck::AbstractVector{<:Integer}, n::Int64)
v = Vector{Vector{Int64}}(undef, n)
for i in 1:n
v[i] = sample(deck, 5; replace=false)
end
return v
end

function is_full_house(hand::AbstractVector{<:Integer})
return extrema(values(countmap(hand))) == (2, 3)
end

function count_full_house(hands::Vector{Vector{Int64}})
s = 0
for i in eachindex(hands)
if is_full_house(hands[i])
s += 1
end
end
return s
end``````
``count_full_house (generic function with 1 method)``

Then from here we just run our simulation.

Code
``````n = 1_000_000

hands = make_hands(deck, n);

count_full_house(hands) / n``````
``0.001446``

And we see that we get roughly the same answer as we did previously.

Citation

BibTeX citation:
``````@online{ekholm2024,
author = {Ekholm, Eric},
title = {Probability of {Drawing} a {Full} {House}},
date = {2024-03-29},
url = {https://www.ericekholm.com/posts/full-house},
langid = {en}
}
``````
For attribution, please cite this work as:
Ekholm, Eric. 2024. “Probability of Drawing a Full House.” March 29, 2024. https://www.ericekholm.com/posts/full-house.