Skip to content
Vamshi Jandhyala

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 11 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 12\tfrac12 from the centre. Imposing all six bisectors carves out a smaller regular hexagon around the centre, rotated 3030^\circ from the lot, with apothem 12\tfrac12.

A regular hexagon of apothem hh has area 23h22\sqrt3\,h^2, and one of circumradius 11 has area 332\tfrac{3\sqrt3}{2}. So the centre’s region has area 2314=322\sqrt3\cdot\tfrac14 = \tfrac{\sqrt3}{2}, and the fraction is 3/233/2=13.\frac{\sqrt3/2}{\,3\sqrt3/2\,} = \boxed{\dfrac13}.

Team Centroid keeps the inner hexagon (apothem 12\tfrac12), one third of the lot; the perpendicular bisectors to the six corners are its edges.

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 13\tfrac13.

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 hh from the centre, the nearer side has area π2+h1h2+arcsinh\tfrac{\pi}{2} + h\sqrt{1-h^2} + \arcsin h, so the larger share is the bigger of the two pieces. Averaging over independent uniform points, 0.640.\boxed{\approx 0.640}. (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 hh 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