Patrick E. McKnight, Ph.D. · Fun & Curiosity
Once In A Lifetime
A family solitaire game, 700 million simulations, and a probability of exactly zero
← Homepage Family Card Game & Computational Probability Source Code
700M+
Games Simulated
0
Wins Found
<1 in 700M
Win Probability

It started, as most good arguments do, at the family table. A confident family member claimed to have won this solitaire game "several times" and found it "boring." With 40-plus years of playing this game and a background in quantitative analysis, the gauntlet was thrown.

The mission: simulate the game hundreds of millions of times and prove just how extraordinary — or ordinary — a win truly is.

The answer, after 700 million simulated games across Python and Julia implementations: not a single win. Zero. The game's name, passed down through generations, turns out to be an understatement. It's not once in a lifetime. It's once in a geological epoch.

This page tells the story of the game, the math, and the computational experiment that settled a family debate forever.

"The best part about a 1-in-700-million chance? It's not zero."

— The family motto, undefeated

How to Play

Start with a standard 52-card deck, shuffled. Your goal: consolidate all 52 cards into a single stack. The rules are deceptively simple.

1

Draw cards one at a time and place them in a row of stacks, left to right.

2

Each new card can match with exactly two positions: the adjacent stack (immediately to its left) or the skip-two stack (with exactly two stacks between them). Think of it as: X X for adjacent, or X _ _ X for the far match. No other positions are ever checked.

3

Two cards match if they share the same suit or same rank. When matched, the new card goes on top of the matched stack, consolidating them.

4

After any match, cascading matches may occur — check if stacks can now match with their own adjacent or skip-two neighbors. Keep cascading until no more matches exist.

5

If neither position matches, the card starts a new stack to the right. Continue until all 52 cards are drawn. Fewer stacks = better.

The Two Matching Positions

A new card can only ever look at two places. Here they are, shown from the new card's perspective:

ADJACENT MATCH (X X)
K♠
A♠
Same suit ♠ → match! Cards consolidate into one stack.
SKIP-TWO MATCH (X _ _ X)
5♥
7♣
Q♠
5♠
Same rank (both 5) → match! Two stacks between are skipped, not checked.

These are the only two positions ever examined. The stacks in between (dimmed above) are irrelevant to the matching decision. If neither position matches, the card starts a new stack.

Worked Example: A Full Turn

You have four stacks on the table and draw A♠. The new card sits at position 5:

POS 1
POS 2
POS 3
POS 4
POS 5
K♥
5♠
7♣
9♥
A♠
too far
SKIP-TWO
skipped
ADJACENT
NEW
Adjacent (pos 4): A♠ vs 9♥ — diff suit, diff rank → NO MATCH
Skip-two (pos 2): A♠ vs 5♠ — same suit! → MATCH!
Pos 1 (K♥): 4 away — not checked
Pos 3 (7♣): between — not checked

Result: A♠ lands on the 5♠ stack (pos 2). They share a suit. The table now has 3 stacks instead of 4. Then we check for cascades.


Scoring & Rarity

Final StacksAchievementFrequencyRarity
1 stackONCE IN A LIFETIME0 in 700MAstronomically rare
2 stacksLegendary0.18%~1 in 550 games
3 stacksExceptional13.3%~1 in 8 games
4 stacksGreat game46.5%Most common outcome
5 stacksGood game31.7%Typical
6+ stacksKeep trying8.3%Below average

The median game ends with 4 stacks. Getting to 3 is a good night. Getting to 2 is a story you tell people. Getting to 1 is something nobody has ever seen — not in 700 million tries.


Score Distribution (1 Million Games)

Final stack count · 1,000,000 simulated games
50% 40% 30% 20% 10% ~0% 1 stack 0.18% 2 stacks 13.3% 3 stacks 46.5% 4 stacks 31.7% 5 stacks 8.3% 6+ stacks FINAL STACK COUNT

The Mathematics of Impossibility

Why Is This Game So Hard?

A standard deck has 52! possible arrangements — that's 8.07 × 1067 unique shuffles. The game's position rule (adjacent or skip-two only) creates an extraordinarily constrained state space where winning requires a precise cascade of matches across all 52 cards.

Possible deck arrangements: 52! = 8.07 × 10⁶⁷ Games simulated: 700,000,000 Coverage: 8.67 × 10⁻⁵⁹ of state space Wins found: 0 Upper bound on P(win): < 1/700,000,000 < 1.43 × 10⁻⁹ For context: Powerball jackpot odds: 1 in 292,201,338 OIAL win (upper bound): < 1 in 700,000,000 → Winning Powerball is at least 2.4× more likely

Five compounding factors make the game nearly impossible:

Restrictive position rules. Only 2 of potentially dozens of stacks are ever checked — adjacent and skip-two. Most cards land with no valid match at all.

Sequential dependencies. Card order matters enormously. A winning sequence requires dozens of rare events in exact succession.

Choice constraints. When both positions match, picking one eliminates the other permanently.

Cascade fragility. Chain reactions can consolidate stacks dramatically — but they require multiple stacks to align by suit or rank in precisely the right positions.

Convergence requirements. Going from 4 stacks to 3 is a 13% event. Going from 3 to 2 is 0.18%. Going from 2 to 1 has never been observed. Each step is exponentially harder than the last.


The Computational Experiment

ImplementationLanguageSpeedMatching Logic
OnceInALifetime.jlJulia~240,000 games/secCorrect: adjacent + skip-two only
GoodOne2.pyPython~35,000 games/secCorrect: adjacent + skip-two only
OiaLver0.0.5.pyPython~35,000 games/secBug: checks all 3 positions within range*

*Implementation note: OiaLver0.0.5.py has a bug on line 39 — its range(max(0, index-3), index) checks all positions within 3 (including the illegal 2-back position), making the game slightly easier than the real rules. The 700M simulation results are valid because they used the Julia implementation (OnceInALifetime.jl) and GoodOne2.py, both of which correctly enforce adjacent-only and skip-two-only matching.

"A family member claimed to have won several times and found it boring. 700 million simulations later, we can confidently say: no, you didn't."

— The conclusion, backed by math

The Family Legacy

This game has been played at family gatherings for decades. It teaches patience, probability intuition, and the humbling experience of attempting something genuinely, mathematically near-impossible. Every game is a fresh chance — not to win, but to see how close you can get.

The code is open source. Try it yourself: github.com/pem725/OnceInALifetime