Farkle
Farkle (1996) is a dice game, with the goal of scoring the most points by rolling favorable combinations of dice. Players roll 6 dice, choosing to score the dice they rolled, or to continue rolling.
Theory
Expected Value
The key to optimal Farkle strategy lies in the expected value (EV), which is the average outcome you'd expect from a decision if you made it many times. For a random variable with possible outcomes and probabilities :
In Farkle, we use expected value to decide whether to bank (keeping your points) or roll (risk points for more).
Farkle Probability
A "Farkle" occurs when you roll no scoring dice. The probability of Farkle depends on how many dice you roll:
| Dice | Farkle Probability |
|---|---|
| 1 | 66.7% |
| 2 | 44.4% |
| 3 | 27.8% |
| 4 | 15.7% |
| 5 | 7.7% |
| 6 | 2.3% |
With 6 dice, you almost always get something. With 1 die, you're more likely to Farkle than not (only a 1 or 5 scores).
The Roll vs Bank Decision
When you have accumulated points this turn and scored points from your current roll (leaving dice to roll), you face a choice:
- Bank: Guarantee points
- Roll: Risk losing everything for the chance at more
The expected value of rolling is:
where is the expected additional points from rolling dice. You should roll when , which simplifies to:
Computing Expected Values
The expected values for each number of dice form a system of equations that can be solved iteratively. The solver below precomputes these values using dynamic programming, evaluating all possible dice combinations and their scoring subsets to find the optimal expected value for each game state.
The "Hot Dice" rule (rolling all 6 dice again when all dice score) is especially favorable since there is only a 2.3% chance to Farkle, and continuing is almost always correct.
Copy from BuddyBoardGames
Paste in the browser console on buddyboardgames.com/farkle to add a copy button:
(() => {
const btn = document.createElement('button');
btn.textContent = '📋 Copy Dice';
btn.style.cssText = 'position:sticky;bottom:10px;left:10px;z-index:9999;padding:8px 12px;border-radius:4px;cursor:pointer';
btn.onclick = () => {
const r = [...document.querySelectorAll('.die-list')].map(d => d.dataset.roll).join(',');
navigator.clipboard.writeText(r).then(() => btn.textContent = '✓ Copied!');
setTimeout(() => btn.textContent = '📋 Copy Dice', 1500);
};
document.body.appendChild(btn);
})();you can then paste (Ctrl+V) the copied dice rolls here.