Here’s How You Can Win at Darts

Somewhat recently, I got a dart board. My wife and I have been playing somewhat often — it’s a great way to blow off steam after work and have a little bit of fun. The game is a little more difficult after a drink or two, but that adds to the challenge, in my opinion. Setting up the dart board was simple enough, and the ‘league distance’ at which one stands for their throws is… actually much closer than you’d think.

But no less, I’m bad at darts. I’m proud when I can get below 100 points at the start of the right-hand side of the scoreboard in a game of 501-up, and that’s pushing it. Then, my brain tells me, ‘Sam, play smart, not hard. Come on. Think. THINK.’ So I thought — perhaps I could use statistics as a crutch?

So, off I went, doing something horribly nerdy. In my first iteration, I broke down the dartboard into four quadrants ( yes, like in your high-school precalculus class ), I, II, III and IV, so into 90 degree segments, and got to work. If you’re not aware, a dartboard looks an awful lot like this:

Then, by my breakdown, QI contains the scores 20, 1, 18, 4, 13 and 6. I took these scores and averaged them up per quadrant. I also took different intervals. The open interval over Q1 would contain 1, 18, 4, and 13, the left-open interval over Q1 would contain 1, 18, 4, 13, and 6, and the right-open interval over Q1 would contain 20, 1, 18, 4 and 13. Got it? Good!

So, with all of that in mind, I added up the total potential scores if you were to only land in each of these intervals — closed, open, left-open and right-open, and then averaged them. The results were pretty cool. In general, you’d do well to just avoid the right-hand side of the board entirely.

Even considering intervals besides the total closed interval for each quadrant, there is no interval on the right-hand side better than the best intervals on the left. So there’s that. Even then, the averages on all of the intervals for the left-hand side of the board are head-and-shoulders above the right-hand side. So that’s neat.

Then, of the left hand side, it would appear that the third quadrant — the bottom left — is slightly better to stick to than the fourth quadrant — the top left. So! If you stick to the bottom left corner of the dartboard as best you can, on average you should get some of your best scores. And that’s that!

Or is it? See, we could end the article right there, no harm, no foul. Move on with our lives. Dream. Inspire. Create. Become. But, I thought about it slightly more than just these four quadrants. See, the quadrants I came up with, while common to the unit circle, are totally arbitrary. Really, there are a lot more quadrants than that — all you have to do to find them is enumerate all of the 90 degree segments of the board. So the question pops out at us — is the bottom left corner really the best place to go, or is there another place we can aim for?

I thought for exactly nine seconds about doing all of that math by hand before I decided I was far too lazy and far too OK at Python to be doing all of that arithmetic. So, I got to coding. My first thought was, ‘Ah, a perfect use-case for a ring buffer!’ ( Although I did forget the term ‘ring buffer’ and had to ask my brother Niko what it was called. He’s a mad genius, and I had a text response in 38.4 seconds. ) Unfortunately, I didn’t know how to make one, I was slightly drunk, and the cookbook version I found was shitty, so I decided I would just use a list and manually address it with some good ol’ modular arithmetic.

Lo and behold, we came up with a terrible data structure with which we could hang on to our scores. I present… the dartboard!

Yeah, it sucks. What do you want? You want to fight? You want to hurt me? Huh? You want me to cry?

The next part is to kind of do a sliding window thing where we take 90 degree hunks of the board and compute all of our very interesting and fabulous scores on them. I thought it was an OK idea. I ended up using a while loop for this part.

The code is a little doppy, but y’know, it’ll do. We huck that whole thing back as a big dictionary that’s keyed by the region name. We bail out of the while loop if we see the same name twice, so that’s pretty neat.

OK! So now we have all of our scores. How can we present them to usr? Why it’s simple, batman. We just… sorta, dynamically print them out based on the keys of the dictionary we just puked up. Like so:

O boy! O boy o boy! Let’s see what we get!

OK! So let’s see what this means. If you can keep it together enough to hit in a 90 degree region, then your best bet is to do your best to stick to the little hunk between 19 and 14, for an average of 12.5 points per dart ( not including double / triple ). This sort of area here:

Alright, so let’s suppose you’re a little bit better than average. You can toss in a region of 5 adjacent scores again and again. Your best bet is to try and hit somewhere between 17 and 16, for an average of 12.4 points-per-dart ( not including double / triple ). These spots, if you can:

And then, if you’re really getting better at darts, and you think you’re hot stuff — you can hit between 4 adjacent scores over and over — you should aim for the region between 19 and 8, for a slightly better average of 12.5 points per dart ( yada yada ). Around here:

But at the end of the day, you’re still gonna lose to that dude who’s been going to that bar with the dart board for ten years who can just honk 20s out of the sky. Still! Impress your friends! Be inexplicably better at darts than them despite having never played! Do a party trick! Don’t show them this article! Really, don’t. Please. I have no idea if it’s right.

What? I’m not a good programmer!? My math is bad!? Don’t you attack my credibility like that. How dare you. Get out. Get out of my article.

Thanks for the read! Was my math bad? Was my code worse? Leave a comment! Help me out, like six people read these articles, and I have no idea if I’m doing any of it right. You can find the code I wrote in this github gist.

Programmer from Ohio. You can expect bad math and worse programming.