Skip to content
Vamshi Jandhyala

Books · The Fiddler: Solutions

Chapter 26

Can You Fling the Fractal Darts?

A dartboard is a unit circle. Inside it sit two congruent circles of radius 12\tfrac12, tangent to each other and to the rim; inside each of those, two circles of radius 14\tfrac14; and so on, the pattern repeating forever inside every circle. A dart’s score is the sum of the areas of every circle it lands inside of or on. What is the most a single dart can score?

The Fiddler, Zach Wissner-Gross, December 5, 2025(original post)

The two half-radius circles, and within each the quarter-radius circle that passes through the very centre; a whole chain of circles meets at that point.

Solution

Aim for the exact centre of the board. The two radius-12\tfrac12 circles are tangent there, so the dart is on both. Inside the right one, its two radius-14\tfrac14 children are tangent at its centre (12,0)(\tfrac12,0), and the left of those children, centred at (14,0)(\tfrac14,0), passes through the board’s centre too. The same happens inside the left radius-12\tfrac12 circle, so the centre lies on two radius-14\tfrac14 circles. Repeating, the centre lies on two circles of radius (12)k(\tfrac12)^k for every k1k\ge1, together with the unit circle. The score is π+2k=1π(12)2k=π+2π13=5π3.\pi + 2\sum_{k=1}^{\infty}\pi\Bigl(\tfrac12\Bigr)^{2k} = \pi + 2\pi\cdot\tfrac13 = \boxed{\tfrac{5\pi}{3}}.

The computation

Build the circles themselves, on the xx-axis: each circle of radius rr centred at cc spawns two children of radius r2\tfrac r2 at c±r2c\pm\tfrac r2. Sum the areas (in units of π\pi, so r2r^2) of every circle that actually contains the board’s centre, pruning any branch that has moved off it. The total is 53\tfrac53.

from fractions import Fraction as F
import sys; sys.setrecursionlimit(10000)
def score(c, r, depth):                  # area/pi of centre-covering circles below (c, r)
    if depth > 200 or abs(c) > r: return F(0)         # off the centre -> prune
    return r*r + score(c - r/2, r/2, depth + 1) + score(c + r/2, r/2, depth + 1)
print(float(score(F(0), F(1), 0)))       # 1.6667 = 5/3  ->  score 5*pi/3

Extra Credit

Now the dart lands at a point chosen uniformly at random on the board. On average, what score does it earn?

Solution

A clean identity does the work. For a uniform point in the unit disk (area π\pi), the expected score is E[score]=1πCarea(C)2=πCrC4,E[\text{score}] = \frac1\pi\sum_{C}\operatorname{area}(C)^2 = \pi\sum_{C} r_C^{4}, since each circle CC lies inside the board, so integrating its indicator returns its own area. With 2k2^k circles of radius 2k2^{-k} at level kk, CrC4=k=02k(2k)4=k=08k=87,\sum_{C} r_C^4 = \sum_{k=0}^{\infty} 2^{k}\bigl(2^{-k}\bigr)^4 = \sum_{k=0}^{\infty} 8^{-k} = \tfrac87, so E[score]=8π73.59.E[\text{score}] = \boxed{\tfrac{8\pi}{7}}\approx 3.59 . (The source’s extra-credit value is behind its paywall; this is my own, for the self-similar two-circles-per-level board above.)

The computation

Throw the darts: build the full circle tree to a fine depth, scatter uniform points over the board, and for each sum the areas of every circle containing it. The average lands on 8π7\tfrac{8\pi}{7}.

import numpy as np
circles = []
def build(c, r, d):
    circles.append((c, r))
    if d < 12: build(c - r/2, r/2, d + 1); build(c + r/2, r/2, d + 1)
build(0.0, 1.0, 0)
rng = np.random.default_rng(0); N = 500_000
rad = np.sqrt(rng.uniform(0, 1, N)); ang = rng.uniform(0, 2*np.pi, N)
x, y = rad*np.cos(ang), rad*np.sin(ang); total = 0.0
for c, r in circles:
    total += np.pi*r*r*(((x - c)**2 + y*y) <= r*r).sum()
print(round(total/N, 4), round(8*np.pi/7, 4))   # ~3.59  3.5904