Mathematics is the second thread of my life. I love it, I write it, and I teach it to teenagers who are ready to fall into it. The work on this page is one ambition in three forms: to make beautiful mathematics accessible to anyone who wants it, set with the typography the subject deserves, and free to read. An open archive of olympiad problems and a growing library of notes.
OlympiadHQ
For the teenager who has just discovered olympiad mathematics.
OlympiadHQ is built for the teenager who wants the material in a form worth keeping, and for the teacher who wants something worth handing them. Twenty thousand attributed problems, openly licensed under CC BY 4.0 or MIT, set with the typography the problems deserve. The same material that AI training datasets are built on, surfaced back to the humans the problems were originally written for. TeX Gyre Pagella for prose, KaTeX for the mathematics, mobile-first, no account required.
On the hunt for beautiful olympiad problems, the indignity of badly typeset mathematics on the web, and a small side project to surface AI training datasets back to the human readers the problems were originally written for.
The July 2026 MoMath Monthly Mindbender: roll six dice and ask for exactly four distinct faces. Choosing the four faces and surjecting the dice onto them gives 15 x 1560 = 23400 rolls out of 46656, a probability of 325/648. That is 1/2 + 1/648, just over one half, and the same count shows three and five distinct faces are exactly equally likely.
The June 2026 MoMath Monthly Mindbender: 100 chords are drawn on a circle, each joining two independent uniform points on the circumference. Two random chords cross with probability 1/3, so the expected number of intersection points is 4950/3 = 1650. The same count fixes the variance, 22660, and the expected number of regions the disc is cut into, exactly 1751.
A 15-second pedestrian signal whose red/green split is itself uniformly random. Closed forms for the probability of red, the expected wait, and the expected total time to cross, each from a one-line integral, with a sample-space picture, an account of length-biasing, and a Monte Carlo check of every result.
A Fiddler puzzle on mutual visibility: sheep at random points in a square, facing random directions, each with a 180-degree field of view. Two sheep see each other with probability 1/4 whatever the pen; for three, the probability reduces to an average of (pi - alpha)(pi - beta)(pi - gamma) over the triangle's angles and comes to about 0.0272, with a Monte Carlo check.
A MoMath Monthly Mindbender: fifty strings have their loose ends tied at random until none remain. The expected number of loops is 1 + 1/3 + 1/5 + ... + 1/99 = 2.938, a shade under three. Since that sum is H(2n) - H(n)/2, the count grows only like half a logarithm, so even a thousand strings average fewer than five loops.
A circular billiard puzzle by Xavier Durawa: Charlotte's strands reflect inside a circular frame; how many earlier strands does the n-th strand cross on average? A self-contained walk through the geometry, the modular-arithmetic reformulation, the piecewise integration, the antipode trick, and the telescoping sum that lands the exact closed form.
A MoMath Monthly Mindbender: can any ten points an adversary chooses in the plane always be covered by pairwise disjoint unit disks? Yes. Randomly translate the densest packing of unit disks, which covers a fraction pi/(2 sqrt 3) = 0.9069 of the plane, and the expected number of uncovered points among ten is 0.9310, below one. The same sum gives 1.0241 for eleven, so ten is exactly where the argument runs out.
A MoMath Monthly Mindbender: your friend picks ten distinct integers between 1 and 100, and you must find two disjoint nonempty subsets with the same sum. You always win. Ten numbers have 1024 subsets but only 956 possible sums, so the pigeonhole principle forces a collision, and deleting the overlap makes the two subsets disjoint.
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.
A MoMath Mindbender suggested by Richard Stanley: a ladybug starts on the 12 of a clock face and steps to a random neighbour at each strike until she has visited every number. The last new number is the 6 with probability 1/11, because on a cycle every vertex other than the start is equally likely to be last, and the 6 sitting opposite the 12 counts for nothing.
Two puzzles from Fiddler on the Proof: starting at the centre of a unit square, move in a uniformly random direction until you hit the boundary — what is the expected distance travelled? Same question in a unit cube.
A puzzle by Xavier Durawa: in a regular polygon, place a circle at the midpoint of each side, tangent to the side and as large as possible without overlap. What fraction of the polygon's area is covered by the n circles?
Constructing the Apollonian gasket fractal from Descartes' Circle Theorem and its complex extension. Includes an elementary algebraic proof, the Lagarias-Mallows-Wilks complex form, and a queue-based Python implementation.
A geometric-probability puzzle by Xavier Durawa: a random chord across a circle intersects a diameter; given that intersection, what is the expected ratio of the shorter segment of the diameter to the longer?
A Sudoku variant by Alf Smith with no number clues, only positional gold cells whose values must equal their row, column, or box position. Solved with Google's CP-SAT.
For which n can the integers 1..n^2 be placed in an n x n grid so that the multiset of row products matches the multiset of column products? Includes a prime-counting impossibility bound and an integer-programming formulation.
A Jane Street holiday puzzle: 78 figurines (12 drummers, 11 pipers, 10 lords, … 1 partridge) are shuffled and drawn without replacement until the partridge emerges. What is the expected value of the maximum count of any one figurine type drawn?
A puzzle from the Julia Robinson Mathematics Festival: navigate from the top-left corner of a grid to the goal cell at the bottom-right, where each cell's number specifies the exact distance you may jump horizontally or vertically to the next cell.
A Z3 solver for LinkedIn's daily Tango puzzle: fill an n×n grid with suns and moons such that no three adjacent cells in any row or column share a symbol; row and column counts are balanced; and pairs of cells linked by = or × constraints match or oppose.
A Jane Street geometric-probability puzzle: two random points (red and blue) are drawn uniformly from a unit square. What is the probability that there is a point on the blue-nearest side of the square equidistant from both?
At what angle should a projectile be launched, under uniform gravity and no air resistance, so that the arc length of its trajectory is maximised? A standard integral and one implicit equation give the answer.
A geometric-probability puzzle: two random points in a unit square define a circle's diameter. What is the probability that part of the circle lies outside the square?
A generating-function argument in which the count is the convolution of Fibonacci numbers; partial fractions over the golden-ratio roots give a closed form involving Fibonacci and Lucas numbers, with f(10) = 235.
A Jane Street puzzle: fill each region of a 9×9 irregularly-partitioned grid with the numbers 1 through N (where N is the region size), such that for every cell containing K, the nearest matching K (taxicab distance) is exactly K cells away.
A Jane Street variant of Block Party on a 10×10 grid: fill each region with 1 through N, but with a cleaner taxicab constraint expressed as two implication clauses per cell.
A Jane Street puzzle: fifteen dancers stand in an equilateral-triangle formation, each unit-distant from their nearest neighbours. Each dancer pairs up with one neighbour; all but one are part of a pair. How many distinct sets of seven pairs are possible?
LinkedIn's Queens puzzle: place one queen per row, column, and colour region of an n×n board, with the additional constraint that no two queens touch, not even diagonally.
A Jane Street puzzle: a 7×7 well with per-cell depths 1 through 49 is filled at 1 cubic foot per minute from the cell marked 1; water disperses evenly among adjacent lower-depth regions. After how many minutes does the water level in cell 43 start to rise?
Closed form for the expected distance from the centre of a regular n-gon of unit circumradius, via a Jacobian substitution on one fundamental triangle; three triangle-sampling methods for computational verification.
A white knight and a black knight on diagonally opposite corners of a 3×3 square. What is the expected number of moves until the black knight captures the white one? A clean Markov-chain problem with a closed form.
Inversion in a circle transforms two hard problems about tangent circles into routine ones: a Pappus chain (prove that the height of the n-th circle equals 2n times its radius) and the distance between the circumscribed and inscribed circles of three mutually tangent circles of radii 1, 2, 3.
A computational construction of star patterns from the Islamic tradition: translational units, motifs, rosettes, and the rosette dual, implemented in Python with NumPy.