Books · The Fiddler: Solutions
Chapter 16
Can You Shovel the Snow?
Two teams clear snow from a hexagonal parking lot whose six corners lie at distance from the centre. Team Vertex stations one shoveler at each of the six corners; Team Centroid puts everyone at the centre. Each team must shovel the snow that starts closer to one of its own members than to anyone on the other team. What fraction of the lot is Team Centroid responsible for?
The Fiddler, Zach Wissner-Gross, March 6, 2026(original post)
Solution
A point belongs to Team Centroid when it is nearer the centre than every corner. For a single corner, the dividing line is the perpendicular bisector of the segment from the centre to that corner, a line at distance from the centre. Imposing all six bisectors carves out a smaller regular hexagon around the centre, rotated from the lot, with apothem .
A regular hexagon of apothem has area , and one of circumradius has area . So the centre’s region has area , and the fraction is
The computation
Scatter snow over the lot and assign each flake to the nearer team: distance to the centre versus the nearest corner. The fraction landing with Team Centroid is .
import numpy as np
rng = np.random.default_rng(0)
ang = np.deg2rad(np.arange(6)*60); V = np.c_[np.cos(ang), np.sin(ang)]
en = np.deg2rad(30 + np.arange(6)*60); N = np.c_[np.cos(en), np.sin(en)]
P = rng.uniform(-1, 1, size=(4_000_000, 2))
P = P[np.all(P @ N.T <= np.sqrt(3)/2, axis=1)] # keep points in the hexagon
dc = np.linalg.norm(P, axis=1)
dv = np.min(np.linalg.norm(P[:, None] - V[None], axis=2), axis=1)
print(round(np.mean(dc < dv), 4)) # ~0.3333
Extra Credit
The lot is now a circular disk. Team Vertex places everyone at one uniformly random point inside it, and Team Centroid everyone at another, independent, uniformly random point. Whichever team is responsible for the larger share, what is the expected size of that larger share?
Solution
The two random points split the disk along their perpendicular bisector, and each team keeps the side nearer its own point. If the bisector lies at signed distance from the centre, the nearer side has area , so the larger share is the bigger of the two pieces. Averaging over independent uniform points, (The source’s extra-credit answer is behind its paywall; this value is my own, by simulation.)
The computation
Draw two uniform points in the disk, find where their perpendicular bisector cuts it (signed distance from the centre), compute the area of the larger piece by the circular-segment formula, and average over millions of pairs.
rng = np.random.default_rng(1)
def disk(n):
r = np.sqrt(rng.uniform(0, 1, n)); t = rng.uniform(0, 2*np.pi, n)
return np.c_[r*np.cos(t), r*np.sin(t)]
n = 4_000_000; A, B = disk(n), disk(n)
M = (A + B)/2; d = B - A; nrm = d/np.linalg.norm(d, axis=1, keepdims=True)
h = np.clip(np.sum(M*nrm, axis=1), -1, 1) # centre-to-bisector distance
frac = (np.pi/2 + h*np.sqrt(1 - h**2) + np.arcsin(h))/np.pi
print(round(np.mean(np.maximum(frac, 1 - frac)), 4)) # ~0.640