Skip to content
Vamshi Jandhyala

Books · The Fiddler: Solutions

Chapter 20

How Long Is the All-Star Streak?

The Fiddler Basketball Association’s All-Star Game pits two teams, “East” and “West,” against each other once a year. Each team has a 5050 percent chance of winning, independent of every other year. Many, many years into the future, you look back at the most recent results. On average, what is the longest current winning streak that one of the teams is on?

The Fiddler, Zach Wissner-Gross, February 6, 2026(original post)

Solution

Only one team can be on a current streak: whoever won the most recent game. Reading backwards from that game, the streak lasts as long as the same team keeps appearing. The current streak has length nn exactly when the last nn results match and the one before them differs. With an unboundedly long past, the first nn agreeing has probability (1/2)n1(1/2)^{n-1}, and the next result breaking the run contributes another factor of 1/21/2, so P(streak=n)=(12)n,n=1,2,3,P(\text{streak} = n) = \Bigl(\tfrac12\Bigr)^{n},\qquad n = 1, 2, 3, \dots The expected streak is therefore n=1n(12)n=2.\sum_{n=1}^{\infty} n \Bigl(\tfrac12\Bigr)^{n} = \boxed{2}.

The computation

Generate long runs of fair coin flips for the recent games, read the current streak backwards from the most recent result (how many in a row match it), and average.

import numpy as np
rng = np.random.default_rng(0); T = 4_000_000
seq = rng.integers(0, 2, size=(T, 40))      # 40 most-recent games
last = seq[:, -1]; run = np.ones(T, int)
for k in range(2, 41):
    run = np.where((seq[:, -k] == last) & (run == k - 1), k, run)
print(round(run.mean(), 4))                  # ~2.0

Extra Credit

Now three teams compete: “Stars,” “Stripes,” and “International.” Each year only two of them play, and the matchup cycles: Stars–Stripes, then Stripes–International, then International–Stars, then back to Stars–Stripes. Every game is still an independent 50505050 toss. Many years in, you again look at the most recent results. On average, what is the longest current winning streak that one of the teams is on?

Solution

A team now sits out every third year, so its current streak counts only the games it actually played. The three streaks are correlated, because one team’s win is another’s loss in any shared game, so the expected maximum of the three is not simply read off from a single team. Simulating the cyclic schedule, the expected longest current streak is 2.50.\boxed{\approx 2.50}. (The source’s extra-credit answer is behind its paywall; this value, strikingly close to 5/25/2, is my own simulation.)

The computation

Simulate the cyclic three-team schedule: read each team’s results backwards from the most recent game it played, counting consecutive wins until its first loss, and average the largest of the three current streaks.

import numpy as np
rng = np.random.default_rng(1)
pair = [(0, 1), (1, 2), (2, 0)]; G = 90; tot = T = 0
for _ in range(100):
    n = 60_000; win = rng.integers(0, 2, size=(n, G))
    cur = np.zeros((n, 3), int); alive = np.ones((n, 3), bool)
    for t in range(G - 1, -1, -1):                 # newest game first
        i, j = pair[t % 3]; w = win[:, t]
        winner = np.where(w == 0, i, j); loser = np.where(w == 0, j, i)
        for team in (0, 1, 2):
            played = (winner == team) | (loser == team); won = winner == team
            cur[alive[:, team] & played & won, team] += 1
            alive[alive[:, team] & played & ~won, team] = False
    tot += cur.max(axis=1).sum(); T += n
print(round(tot / T, 4))                            # ~2.50