Bacteria That Cannot Leave
A MoMath Monthly Mindbender, after Maxim Kontsevich, asks roughly how many divisions clear a 4-by-4 box at the origin. No number does. Weighting the point (x, y) by (1/2)^(x+y) makes every division weight-preserving, so the colony always carries total weight 1, while everything outside the box has capacity only 31/64.
Problem
A bacterium begins at the origin on the plane grid. At time , it divides into two bacteria that will sit just north and east of the parent, that is, at points and . In general, at any time, any bacterium that has room to divide may do so; that is, if a bacterium sits at the point , it may be replaced by a bacterium at and another at if those points were unoccupied. Roughly, how many divisions must take place before the closed box with corners at , , and is clear of bacteria?
Credit: Peter Winkler, Monthly Mindbenders, National Museum of Mathematics, February 2026, after a puzzle of Maxim Kontsevich.
The question has no number for an answer
The colony grows without bound and spreads arbitrarily far from the origin. The box is still never clear. Whatever schedule of divisions you choose, however long you run it, at least one bacterium remains inside those sixteen points, and it is not the same lonely straggler each time: more than half of a certain conserved quantity is stuck there permanently.
A quantity that never changes
Give the lattice point in the first quadrant the weight and give a configuration of bacteria the total weight of the points it occupies. A division at removes and puts back The two children between them carry exactly the weight of the parent. So the total weight of the colony is unchanged by every legal move, whichever bacterium divides and in whatever order. The colony starts as a single bacterium at the origin, of weight , so at every moment, under every schedule, the bacteria carry total weight exactly .
How much weight the outside can hold
Now ask where that weight could possibly sit. Each lattice point holds at most one bacterium, so a set of points can hold at most its own total weight. Since , the sums factorise. The whole first quadrant is worth and the box, the sixteen points with and , is worth Everything strictly outside the box is worth the difference, and that is a ceiling on what the outside can ever hold, reached only if every one of the infinitely many points outside the box were occupied at once. Since , the outside cannot accommodate the conserved weight. At least of weight sits inside the box at every moment, and weight is carried only by bacteria, so the box is never clear. At least one bacterium sits inside it forever.
Why the intuition fails
The pull of the question is the sense that a growing colony must eventually vacate any fixed patch, since it only ever moves north and east. It does grow: after divisions there are bacteria, and the front runs off to infinity. The weight argument says that the growth is the wrong thing to watch. Motion away from the origin is exactly what costs weight, and a fixed budget of buys only so much of it. The bacteria that have travelled far carry almost nothing, so they cannot relieve the ones near the origin of their share.
Nothing in the argument is probabilistic, and nothing depends on the order of divisions, so the bound holds even against an adversary who picks each move with the express aim of clearing the box, and holds in the limit too, since passing to a limit can only lose weight from the outside region.
What the argument reaches
The proof has two halves that vary independently. Conservation comes from the identity and is specific to this splitting rule. The capacity count applies to any region at all.
Call a finite region of the quadrant unclearable if the bacteria can never all be outside it. The count above proves this whenever the complement of is worth less than , that is, whenever For the square box the weight is , which is at and at , and increases to . Every square box anchored at the origin with is therefore unclearable, and the puzzle’s box, at , is not the smallest one with the property. The three-by-three square already traps a bacterium forever, with the tighter margin .
Triangles behave the same way. The staircase has points on its outer diagonal and weight which is at and at . So some bacterium always sits within of the origin, however long the process runs. At the weight falls below and the argument goes quiet, which is the usual position of a capacity bound: it is sufficient, not necessary, and where it stops speaking the question stays open.
| Region | Weight | Outside capacity | Clearable? |
|---|---|---|---|
| argument silent | |||
| never | |||
| (the puzzle) | never | ||
| argument silent | |||
| never |
The shape of the reasoning travels further than the puzzle. A move that leaves some quantity exactly invariant, paired with a region whose capacity for that quantity is too small, forbids an outcome without any accounting of how the process runs. Conway’s soldiers is the same manoeuvre, with a weight that decays as in the distance from the target square, the golden ratio being forced by , the identity that makes a jump conserve weight. The choice of here is forced in the same way: it is the number that makes two children weigh what one parent weighed.
Computational verification
The arithmetic above is hard to get wrong, so the code earns its place elsewhere: it plays the game. It keeps the occupied set, picks a bacterium with room, divides it, and does so under two schedules, one random and one that always divides the outermost bacterium still in the box in an effort to empty it. Both run for two hundred thousand divisions.
import heapq, random
W = lambda x, y: 0.5**(x + y) # the weight of the cell (x, y)
BOX = [(x, y) for x in range(4) for y in range(4)]
box = sum(W(*c) for c in BOX)
print(f"quadrant {4.0:.4f} box {box:.4f} outside {4-box:.4f}"
f" room outside for weight 1? {4-box >= 1}")
def run(order, steps=200_000): # `order` fixes the schedule
occ, heap, tick = {(0, 0)}, [], 0
free = lambda c: (c in occ and (c[0]+1, c[1]) not in occ
and (c[0], c[1]+1) not in occ)
def offer(c): # a cell that may now divide
nonlocal tick; tick += 1
if free(c): heapq.heappush(heap, (order(c), tick, c))
offer((0, 0))
for n in range(1, steps + 1):
while True: # drop cells walled in since
c = heapq.heappop(heap)[2]
if free(c): break
x, y = c
occ.remove(c); occ |= {(x, y+1), (x+1, y)}
for a, b in ((x, y), (x, y+1), (x+1, y)):
for e in ((a, b), (a-1, b), (a, b-1)): offer(e)
if n in (1_000, 10_000, 100_000, 200_000):
ib = [c for c in BOX if c in occ]
print(f" {n:>7,}: {len(occ):>7,} bacteria, {len(ib)} in box,"
f" in-box weight {sum(W(*c) for c in ib):.4f},"
f" total {sum(W(*c) for c in occ):.6f}")
random.seed(2026)
print("a random schedule")
run(lambda c: random.random())
print("a schedule that empties the box as fast as it can")
run(lambda c: (0, -(c[0]+c[1])) if max(c) < 4 else (1, c[0]+c[1]))
# quadrant 4.0000 box 3.5156 outside 0.4844 room outside for weight 1? False
# a random schedule
# 1,000: 1,001 bacteria, 9 in box, in-box weight 0.7656, total 1.000000
# 10,000: 10,001 bacteria, 9 in box, in-box weight 0.7656, total 1.000000
# 100,000: 100,001 bacteria, 9 in box, in-box weight 0.7656, total 1.000000
# 200,000: 200,001 bacteria, 9 in box, in-box weight 0.7656, total 1.000000
# a schedule that empties the box as fast as it can
# 1,000: 1,001 bacteria, 9 in box, in-box weight 0.7656, total 1.000000
# 10,000: 10,001 bacteria, 9 in box, in-box weight 0.7656, total 1.000000
# 100,000: 100,001 bacteria, 9 in box, in-box weight 0.7656, total 1.000000
# 200,000: 200,001 bacteria, 9 in box, in-box weight 0.7656, total 1.000000
Both schedules settle on the same nine survivors, the square of weight . Those nine are walled in, each having its northern and eastern neighbour occupied, so none may divide again. The bottom row and left column do drain, since a point on an axis can only be replenished from the point below it or to its left, and the origin can be replenished from nowhere. The observed floor of sits above the guaranteed , which is what one expects of a bound that assumes every outside point occupied at once. The printed total, at every checkpoint, is the invariant doing its work.
So the answer to “roughly how many divisions” is that there is no such number. The box is never cleared, and the reason is a single line of arithmetic: .