Skip to content
Vamshi Jandhyala

Books · The Fiddler: Solutions

Chapter 22

Bingo!

A bingo card is a grid of numbered squares with a free, pre-marked square in the very centre. Numbers are called one at a time, uniformly at random and without replacement; you mark a square when its number is called. You win on getting a full line, across, down, or along a main diagonal. Start with the 3×33\times3 version: a free centre surrounded by eight numbered squares. On average, how many markers do you place before you get bingo?

The Fiddler, Zach Wissner-Gross, January 23, 2026(original post)

Solution

Label the squares 1234F6789\begin{matrix}1&2&3\\4&\text{F}&6\\7&8&9\end{matrix} with F the free centre, already marked. The eight winning lines are the three rows, three columns and two diagonals. Four pass through the centre (middle row, middle column, both diagonals) and need only their two outer squares; the four outer lines need all three of their squares. The eight numbered squares are called in a uniformly random order, and we want the expected position of the first call that completes a line.

With only 8!=403208! = 40320 orderings, the average is exact by direct enumeration: E[markers]=24370=3.4714.E[\text{markers}] = \frac{243}{70} = \boxed{3.4714\ldots}. A line through the centre finishes as soon as both of its two squares appear, which tends to happen early, pulling the average just below 3123\tfrac12.

The computation

Enumerate all 8!8! call orders. For each, mark squares one by one (the centre starts marked) and record the position at which a line first completes; average those positions.

import itertools as it
from fractions import Fraction as F
lines = [(0,1,2),(6,7,8),(0,3,6),(2,5,8),(3,4,5),(1,4,7),(0,4,8),(2,4,6)]
nums = [c for c in range(9) if c != 4]          # 4 = free centre
tot = 0
for perm in it.permutations(nums):
    marked = {4}
    for t, c in enumerate(perm, 1):
        marked.add(c)
        if any(all(x in marked for x in L) for L in lines):
            tot += t; break
print(F(tot, 40320))                            # 243/70 = 3.4714...

Extra Credit

Return to the full 5×55\times5 card: a free centre and 2424 numbered squares, with the twelve winning lines being five rows, five columns and the two main diagonals. On average, how many markers until bingo?

Solution

The four lines through the centre again get a head start. Enumerating all 24!24! orderings is hopeless, but a Monte Carlo over random call orders converges quickly to E[markers]13.6.E[\text{markers}] \approx \boxed{13.6}. (The source’s value is behind its paywall; this estimate is my own, from simulated cards.)

The computation

Simulate random call orders for the 5×55\times5 card: mark squares until some row, column, or main diagonal is complete, and average the marker count over millions of cards.

import numpy as np
cells = [(r, c) for r in range(5) for c in range(5)]
free = (2, 2); nums = [x for x in cells if x != free]
idx = {c: i for i, c in enumerate(cells)}
lines = ([[(r, c) for c in range(5)] for r in range(5)] +
         [[(r, c) for r in range(5)] for c in range(5)] +
         [[(i, i) for i in range(5)], [(i, 4 - i) for i in range(5)]])
L = [[idx[c] for c in ln] for ln in lines]
rng = np.random.default_rng(0); T = 2_000_000; s = 0
for _ in range(T):
    order = rng.permutation(24); m = np.zeros(25, bool); m[idx[free]] = True
    for t in range(24):
        m[idx[nums[order[t]]]] = True
        if any(m[ln].all() for ln in L): s += t + 1; break
print(round(s / T, 3))                          # ~13.61