MTG Mulligan Probability Calculator

ANALife Services AuthorityNational Calculator Authority›MTG Mulligan Probability Calculator

.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }

MTG Mulligan Probability Calculator

Calculate the probability of having at least a certain number of key cards (e.g., lands, combo pieces) in your opening hand, accounting for multiple mulligans using the London Mulligan rule.

Deck Size (cards)

Number of Key Cards in Deck

Minimum Copies Wanted in Hand

Maximum Copies Wanted in Hand (0 = no max)

Number of Mulligans Taken (0–3)

On the Play? (draws 7, not 8)

Yes (on the play) No (on the draw)

Calculate Results will appear here.

function mtgHypergeometric(N, K, n, k) { // P(X = k) = C(K,k)*C(N-K,n-k)/C(N,n) function logFactorial(x) { if (x a) return -Infinity; if (b === 0 || b === a) return 0; return logFactorial(a) - logFactorial(b) - logFactorial(a - b); } var logP = logComb(K, k) + logComb(N - K, n - k) - logComb(N, n); return Math.exp(logP); }

function mtgHypergeoCDF(N, K, n, minK, maxK) { // P(minK Please fill in all fields with valid numbers.'; return; } if (N 250) { resultDiv.innerHTML = 'Deck size must be between 40 and 250.'; return; } if (K N) { resultDiv.innerHTML = 'Key cards must be between 1 and deck size.'; return; } if (minCopies 7) { resultDiv.innerHTML = 'Minimum copies must be between 1 and 7.'; return; } if (maxCopies !== 0 && maxCopies Maximum copies must be 0 (no max) or >= minimum copies.'; return; } if (mulligans 3) { resultDiv.innerHTML = 'Mulligans must be between 0 and 3.'; return; }

var effectiveMax = (maxCopies === 0) ? 7 : maxCopies;

// London Mulligan: after m mulligans, you draw 7 cards and keep (7 - m) // You bottom (m) cards after drawing 7 each time. // For probability purposes: you see 7 cards each mulligan attempt. // The probability of a "good" hand on attempt i (0-indexed) is: // P(good | see 7 cards from remaining deck) using hypergeometric // We model: each mulligan you draw 7 from the full deck (shuffled fresh). // P(keep on first draw) = P(good in 7) // P(keep after 1 mulligan) = P(bad in 7) * P(good in 7 with 6 kept) // After m mulligans, hand size = 7 - m

// P(good hand of size h) = P(minCopies 0) ? ' (forced keep)' : ''; tableRows += '' + '' + label + forced + '' + '' + row.handSize + '' + '' + (row.pReach * 100).toFixed(2) + '%' + '' + (row.pGood * 100).toFixed(2) + '%' + '' + (row.pKeepGood * 100).toFixed(2) + '%' + ''; }

var maxLabel = (maxCopies === 0) ? '7' : maxCopies; var playLabel = (onPlay === 1) ? 'on the play' : 'on the draw';

resultDiv.innerHTML = '### Results ' + 'Configuration: ' + N + '-card deck, ' + K + ' key cards, want ' + minCopies + '–' + maxLabel + ' in hand, ' + mulligans + ' mulligan(s) allowed, ' + playLabel + '.

' + '' + '' + 'Attempt' + 'Hand Size' + 'P(Reach)' + 'P(Good Hand)' + 'P(Keep Good)' + '' + tableRows + '' + 'Total probability of a satisfactory hand: ' + (totalGood * 100).toFixed(2) + '%

' + 'Probability of an unsatisfactory hand: ' + ((1 - totalGood) * 100).toFixed(2) + '%

'; }

#### Formula

Each draw uses the Hypergeometric Distribution:

P(X = k) = C(K, k) × C(N−K, n−k) / C(N, n)

A hand is "good" if minCopies ≤ X ≤ maxCopies.

Under the London Mulligan, after m mulligans you draw 7 cards and keep 7−m (bottoming m cards). For probability modeling, each attempt is treated as drawing from a freshly shuffled full deck of size n = 7−m.

Total probability of a good hand:

P(good) = Σi=0..m [ P(bad)i × P(good | hand size 7−i) ]

where P(bad)i is the probability of reaching attempt i (all prior hands were bad).

#### Assumptions & References

More Calculators

Read Next

Ni Class 2 Vs Class 4 Contributions Comparator ANA › Life Services Authority › National Calculator Authority › NI Class 2 vs Class 4 Contributions Comparator .calc-container...

National Insurance Class Checker Employed Vs Self Employed ANA › Life Services Authority › National Calculator Authority › National Insurance Class Checker (Employed vs Self-Employed)...

Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...

References