## The puzzle

Suppose there is a class of size n. Explanation …

## Simulation solution

This is how we solved the BP with simulation.

`set.seed(1)`

The second thing we did was write a function to mimic roster
creation.

```
one_roster <- function(S = 11){
birthdays <- sample(x = 365, size = S, replace = TRUE)
any(duplicated(birthdays))
}
R <- 100000
```

We used our function to create 10^{5} rosters.

```
out <- rep(NA, R)
for(i in 1:R){
out[i] <- one_roster()
}
out <- replicate(R, one_roster())
```

For a roster size of 11, we found the probability to be 0.14286.

```
## Additional Code
first_duplicate <- function(){
birthdays <- sample(x = 365, size = 366, replace = TRUE)
min(which(duplicated(birthdays)))
}
out3 <- replicate(R, first_duplicate())
#hist(out3, freq = FALSE)
plot(ecdf(out3), xlab = "Roster size", ylab = "Proability of shared birthday", main = "Proability of shared birthday by class size")
abline(h=mean(out), v = 11)
```

## Analytic solution

We can use math notation in the commentary. \[
y = \alpha + \beta x + \epsilon
\]

\[
P(\text{shared birthday} | \text{roster size = n}) = 1-\frac{365 \cdot
364 \cdots (365 - n + 1)}{365^n} = 1 - \frac{{365 \choose n}n!}{365^n}
\]

```
# Analytic solution
plot(ecdf(out3), xlab = "Roster size", ylab = "Proability of shared birthday", main = "Proability of shared birthday by class size")
bp <- function(n) 1-exp(lchoose(365,n) + lfactorial(n) - n*log(365))
lines(1:80, bp(1:80), col = "red", lwd = 3)
legend("topleft", legend = c("Simulation","Analytic"), col = c("black","red"), lwd = 3)
```