A 100 meter dash that picks your fantasy football draft order.
Type in 12 team names, hit start, and twelve football players sprint down a track. Finish order is your draft order. One HTML file, no dependencies, no build step, works offline.
Open index.html in any browser. That's it.
Here is the link: https://patrick-vuong.github.io/zero-ball-knowledge-dash/
Each runner gets a fresh roll of the same six parameters every race:
| Parameter | Range | What it does |
|---|---|---|
| Reaction time | 0.10 – 0.28 s | How fast they leave the blocks |
| Top speed | ~10.4 ± 0.5 m/s | Ceiling, clamped to 9.3 – 11.5 |
| Acceleration constant | 1.05 – 1.55 | How quickly they reach that ceiling |
| Wobble (x2) | ±2 – 5% | Surges and stumbles mid-race |
| Late kick | -2% – +6.5% | Closing burst over the last 25 m, or a tie-up |
| Fade | 0 – 1.4% /s | Endurance drop-off after 6 s |
Position is integrated per animation frame; finish times are interpolated sub-frame so ties break honestly. Races run about 10.4 seconds, the average margin of victory is 0.22 s, and roughly one race in six is close enough at the line to earn a PHOTO FINISH tag.
Every runner draws from an identical distribution, so no lane has an edge. That
claim is tested rather than asserted — the suite extracts the physics out of
index.html at runtime, so it exercises the exact code the browser runs:
node fairness.test.mjsTen tests, including:
- Win rate is uniform across all 12 lanes. 24,000 races, chi-square 11.3 against a 31.3 critical value at p<0.001. Observed win rates land between 8.07% and 8.68% versus the expected 8.33%.
- Every lane lands in every draft slot equally. The full 12x12 lane-by-position matrix, chi-square 116.7 with 121 degrees of freedom.
- Mean finishing position is 6.50 for every lane.
- Races are independent. Winning one race does not predict winning the next.
- No repeated orders. Zero identical back-to-back finishes in 3,000 races (there are 479,001,600 possible orderings).
- Plus structural checks: all 12 always finish, times are plausible and sorted, runners start from a standstill after their reaction time.
| File | |
|---|---|
index.html |
The whole game — markup, styles, SVG players, physics |
fairness.test.mjs |
Fairness and sanity suite (Node 18+, no dependencies) |
- Team names are saved to
localStorage, so you only type them once. - Sound (starter's pistol, finish chimes) toggles from the speaker icon.
- Lane heights adapt so all 12 lanes fit on screen without scrolling.
- Typography is Anton / Archivo / Chivo Mono via Google Fonts, with system fallbacks so the page still looks right offline.