## What are the chances of rolling “snake eyes”?

We were play testing my friend Sam’s board game this weekend. It features “annihilator towers” – you build up N levels of tower, and then roll N 6-sided dice to determine the damage dealt. Here’s the wrinkle though: If you roll two or more ones, then the tower explodes and the damage is dealt to the home team. What are the chances of rolling two ones, for a given tower level?

We thought a little about it, but nobody was keen on sitting down and actually working it out. I wrote a little Python program that produced statistical answers. That was sufficient to practically answer the question, but what’s the “real” answer?

First the Python simulation:

```
import sys, random
def roll(n):
R = [random.randint(1, 6) for i in range(n)]
return len(filter(lambda x:x==1,R)) >= 2
N = 100000
dead = 0.0
for i in range(N):
if roll(int(sys.argv[1])): dead += 1
print dead / N
```

And the results:

N Dice | Prob. of 2+ ones |
---|---|

2 | 0.02807 |

3 | 0.07452 |

4 | 0.13220 |

5 | 0.19485 |

6 | 0.26325 |

7 | 0.33054 |

8 | 0.39793 |

So, how to calculate it?

The chance of rolling *exactly* two ones on N dice is:

(1/6)^{2} × (5/6)^{N-2} × combin(N,2)

combin(N,2) is the number of ways of choosing two dice from N dice. The formula is:

combin(n,k) = n! / k!(n-k)!

But we’re not finished yet. We need to count the possibilities where we roll *more than* two ones. In general, the chance of rolling exactly *k* ones on N dice is:

P(N,k) = (1/6)^{k} × (5/6)^{N-k} × combin(N,k)

So the chances of rolling *two or more* ones for N dice is:

N | |

Σ | P(N,k) |

k=2 |

So for 3 dice, it’s P(3,2) + P(3,3). For four dice it’s P(4,2) + P(4,3) + P(4,4), etc. Here’s a Python program to calculate that:

```
from math import factorial as f
def combin(N,k):
return f(N)/(f(k)*f(N-k))
def P(N,k):
return (1.0/6)**k * (5.0/6)**(N-k) * combin(N,k)
import sys
N = int(sys.argv[1])
print sum( [P(N,k) for k in range(2,N+1)] )
```

And the results…

N Dice | Prob. of 2+ ones |
---|---|

2 | 0.0277777777778 |

3 | 0.0740740740741 |

4 | 0.131944444444 |

5 | 0.196244855967 |

6 | 0.263224451303 |

7 | 0.330204046639 |

8 | 0.39532309766 |

That accords pretty well with the numerical results. Apparently I have managed to remember something from my A-level maths!!

## Matt said,

26 January, 2015 @ 19:12

If you want a closed formula you can also use the complement! If X is the number of 1s you roll, then P(X >= 2) = 1 – P(X < 2), and the right-hand side is simply 1 – (5/6)n – n(5/6)n – 1(1/6). This theoretical expression agrees nicely with your experimental results for n between 2 and 8.

## Matt said,

26 January, 2015 @ 19:13

(Formatting snafus in the comment above, expression should be

1 – (5/6)^n – n(5/6)^(n – 1)(1/6)