Teardown2026-05-178 min

We ran 124 million simulated cornhole throws. Here's what it cost and what we got.

A parametric physics engine, 8 parameters, two overnight runs. The database exists. Here's the honest accounting of what building it took and what we learned that we couldn't have learned any other way.

We built a parametric physics simulation of cornhole bag flight to map the full outcome landscape. To understand where good throws live in parameter space, you have to compute it across the full range. You can't estimate it from intuition alone.

So we built a parametric physics simulator and ran it twice.

What Claude Code wrote

The engine models a cornhole bag as a rigid body in flight. Ballistic trajectory with aerodynamic drag (quadratic in velocity). Spin-induced lift via Magnus effect. Board collision with a two-stage response: normal impulse on contact, then friction-governed slide toward or away from the hole. It took about four hours to get a version that passed visual inspection on test throws, and another day to tune the bounce coefficients against video from our actual board setup.

Claude Code wrote the physics engine. I reviewed every function, caught two wrong sign conventions in the drag term, and corrected the board normal vector. The collaboration model here was: agent drafts, I verify the math.

We ran 124 million simulated cornhole throws. Here's what it cost and what we got. — slide

Grid run: 31.9 million throws in 23.5 minutes

The first run was a full parametric grid. Eight parameters: launch angle (20-65 degrees, 46 values), speed (12-35 ft/s, 24 values), release height (2.0-6.5 ft, 10 values), spin (0/1/3/5/8/12 rev/s), throw distance (15/18/21/24/27 ft), board angle (10-20 degrees, 6 values), friction (0.15/0.3/0.45/0.6), drag coefficient (0.01-0.04, 4 values). Full cross product. 31.9 million throws at 22,728 throws per second. Twenty-three and a half minutes.

Outcomes: 65,248 cornholes (0.20%), 145,128 woodies (0.45%), 31.8 million misses (99.3%).

That 99.3% miss rate looks alarming. It isn't. The grid includes physically unreachable combinations: a 20-degree launch from 27 feet at 12 ft/s doesn't reach the board. The grid maps the full landscape, including impossible territory. That's its job.

Overnight run: 91.6 million throws in 6 hours

The second run randomized parameters within realistic player ranges and added 8 wind conditions: calm, light headwind, light tailwind, moderate headwind, moderate tailwind, crosswind left, crosswind right, gusty. 91.6 million throws at 4,243 per second over 6 hours.

Outcomes shifted dramatically: dirt_short (80.1%), off_back (12.6%), woody (5.2%), cornhole_air (1.3%), cornhole_slide (0.8%). Overall scoring rate 7.3%. Cornhole rate 2.09%.

The slower throughput on overnight vs. grid (4,243 vs. 22,728 throws/sec) comes from the wind randomization overhead per throw.

We ran 124 million simulated cornhole throws. Here's what it cost and what we got. — slide

What the numbers actually mean

The jump from 0.66% scoring in the grid to 7.3% in the overnight run isn't a contradiction. The grid covers the full parameter space including throws no human ever throws. The overnight run samples realistic player distributions. The 7.3% is the better number for analyzing real play because it reflects realistic player distributions.

The 2.09% cornhole rate across 91 million realistic throws tells you the game is hard for a specific reason: the scoring window is narrow across all eight parameters simultaneously. Change any one by a small amount and you fall off the edge.

What it gives us

The combined database is 124 million throws with full parameter and outcome labels. It gives us a high-resolution map of the outcome landscape across the full parameter space — which regions produce cornholes, which produce woodies, and which are dead territory. That's the scientific output. What you do with it is downstream.

The total compute cost was under a day of CPU time on a standard machine. The engineering cost was about two days. For a dataset that would take years to collect from real play, that's the deal.