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 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 exactly when the last results match and the one before them differs. With an unboundedly long past, the first agreeing has probability , and the next result breaking the run contributes another factor of , so The expected streak is therefore
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 – 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 (The source’s extra-credit answer is behind its paywall; this value, strikingly close to , 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