Skip to content
Vamshi Jandhyala

Books · The Fiddler: Solutions

Chapter 62

Can You Play the Favorite?

In a four-team region seeded 11 through 44, when an MM-seed plays an NN-seed the MM-seed wins with probability NM+N\tfrac{N}{M+N}. The bracket is 11 vs 44 and 22 vs 33, and the winners meet. What is the probability the 11-seed wins the region?

The Fiddler, Zach Wissner-Gross, March 21, 2025(original post)

Solution

The 11-seed beats the 44-seed with probability 45\tfrac45, then meets the 22-seed (who arrives with probability 35\tfrac35) or the 33-seed (probability 25\tfrac25): P=45(3523+2534)=45710=142556%.P=\frac45\left(\frac35\cdot\frac23+\frac25\cdot\frac34\right) =\frac45\cdot\frac{7}{10}=\frac{14}{25}\approx\boxed{56\%}.

The computation

Encode the bracket: the 11-seed must beat its first opponent, then beat whichever of the 22- and 33-seeds survives, each path weighted by the model’s win probabilities.

from fractions import Fraction as F
beat = lambda m, n: F(n, m + n)             # P(m-seed beats n-seed)
print(beat(1, 4) * (beat(2, 3)*beat(1, 2) + beat(3, 2)*beat(1, 3)))   # 14/25

Extra Credit

For a region of 2k2^k teams under standard seeding and the same model, what is the 11-seed’s probability of winning?

Solution

Folding the bracket up recursively (each subregion produces a distribution over its possible winners, then the two halves meet) gives no tidy closed form; the probability drifts slowly toward 12\tfrac12: k=1: 23,k=2: 1425,k=3: 2251484264650.528,k=4: 0.519.\begin{gathered} k=1:\ \tfrac23,\qquad k=2:\ \tfrac{14}{25},\\[2pt] k=3:\ \tfrac{225148}{426465}\approx0.528,\qquad k=4:\ \approx\boxed{0.519}. \end{gathered} (The general value is paywalled; these are my own.)

The computation

Build each subregion’s full distribution over who emerges, then collide the two halves under the win model; standard seeding orders the bracket so favourites meet late.

from fractions import Fraction as F
def region(seeds):
    if len(seeds) == 1: return {seeds[0]: F(1)}
    h = len(seeds) // 2; L, R = region(seeds[:h]), region(seeds[h:]); out = {}
    for a, pa in L.items():
        for b, pb in R.items():
            out[a] = out.get(a, F(0)) + pa*pb*F(b, a + b)
            out[b] = out.get(b, F(0)) + pa*pb*F(a, a + b)
    return out
def order(k):
    o = [1, 2]
    for r in range(1, k):
        m = 2**(r + 1) + 1; o = [x for pr in zip(o, [m - x for x in o]) for x in pr]
    return o
for k in (3, 4): print(k, float(region(order(k))[1]))   # 0.5279, 0.5192