Weathered Out, So I Learned to Subtract Toward Zero

Darts (501) 🎮 Play: Cabinet & Wire: The Checkout

The ceiling sat at about four hundred feet with a forecast that amounted to a shrug, so nobody was flying anywhere and the dartboard by the coffee urn — the one everybody ignores until the weather turns it into the only game in the building — suddenly had a queue. Someone chalked 501 on the scoreboard. I lost the first three legs badly, and somewhere in the third I stopped caring about the throwing. My hands were never going to be interesting on day one. The number floating over every turn was.

Here is the part that grabbed me, stated plainly: 501 is a subtraction race with one cruel rule. You start at 501, subtract whatever each dart scores, and you have to land on exactly zero — with the final dart in a double (the outer ring), where the bullseye counts as a double-25, worth 50. Miss zero, drop below 2, or reach zero on a non-double, and you bust: the whole turn is voided and your score snaps back to where the turn began. So the endgame isn’t “score a lot.” It’s “arrive at a number you can actually finish from.”

A scrap of paper covered in pencilled checkout arithmetic — a halving ladder from 32 down through D16, D8, D4 — beside a steel-tip dart on a pub table.
The halving ladder, pencilled between throws. Notation, basically.

Not all leaves are equal, and the asymmetry is beautiful. Land yourself on 32 and you are sitting on the friendliest number on the board. Thirty-two is D16. Miss inward into the single 16 and you’re left with 16 — which is D8. Miss that into single 8 and you have D4. Then D2, then D1. Every honest miss halves you straight onto another double: 32 → 16 → 8 → 4 → 2, a clean binary ladder that never dumps you somewhere awful. That’s why good players knife-fight to leave an even number, and 32 above all. Leave yourself on an odd number — say 7 — and you can’t finish with one dart at all (there is no D3.5), so you have to spend a whole dart throwing a deliberate single just to set up an even double. Odd leaves cost tempo.

The bit that actually kept me at the oche between legs was the search, because it’s the same routine I ran on a cryptic clue last week — parse the constraints, don’t guess and hope. Given a score, is there a three-dart checkout, and what is it? That’s a tiny tree search. So on the bus home I wrote the obvious thing:

singles = [(f"S{n}", n) for n in range(1, 21)] + [("S25", 25)]
doubles = [(f"D{n}", 2*n) for n in range(1, 21)] + [("BULL", 50)]
trebles = [(f"T{n}", 3*n) for n in range(1, 21)]
all_throws = singles + doubles + trebles

def finish(score, darts):
    if darts == 1:                     # last dart MUST be a double
        return next(([nm] for nm, v in doubles if v == score), None)
    for nm, v in all_throws:
        if v < score:                  # leave something to double out on
            rest = finish(score - v, darts - 1)
            if rest:
                return [nm] + rest
    return None

def checkout(score):                   # shortest legal out, ≤ 3 darts
    return next((r for n in (1, 2, 3) if (r := finish(score, n))), None)

Run checkout(170) and you get ['T20', 'T20', 'BULL'] — sixty, sixty, fifty. That’s the highest possible three-dart finish; there is nothing above it, which is a fact worth carrying to a pub. More useful is what happens when you sweep the whole range:

>>> [s for s in range(2, 171) if checkout(s) is None]
[159, 162, 163, 165, 166, 168, 169]

Seven numbers between 2 and 170 that cannot be checked out in three darts no matter how well you throw. These are the bogey numbers, and the entire scoring half of the game is a slow campaign to never be caught sitting on one when your turn ends. You’re not just aiming at the big fat 20. You’re steering your remaining total, three darts at a time, toward 32 and away from 169.

What struck me is the inversion from the last few things I’ve tried. In fencing and at the pool table, my head understood the geometry and my body flatly refused to execute it. Darts, on day one, is the opposite: the throwing is a coarse, forgiving gesture — get the dart somewhere near a large number — and the actual craft is a search problem I can run entirely between my ears while the weather does whatever it likes outside. I still lost every leg. But I lost them holding a checkout table I’d derived myself, which is a much better way to lose.