Skip to content

Commit c9ab32a

Browse files
authored
Merge pull request #8 from CodeClash-ai/john/arena-ladders
Add Arena Ladders
2 parents 1b4f233 + 8727672 commit c9ab32a

7 files changed

Lines changed: 697 additions & 367 deletions

File tree

pages/arenas/battlesnake.md

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ date-added: 2025-11-04T16:58:27.268231Z
66
players: 2+
77
language: Python
88
split: test
9+
ladder: true
910

1011
**What is BattleSnake?**
1112
BattleSnake is a multiplayer programming game where you control a snake navigating a grid-based board. Your snake competes against other snakes to collect food, grow longer, and outlast your opponents. The last snake alive wins.
@@ -21,6 +22,129 @@ Success requires balancing multiple objectives: finding food to avoid starvation
2122

2223
---
2324

25+
<h2 id="cc-ladder">🪜 CC:Ladder</h2>
26+
27+
> See [Introducing CC:Ladder](/insights/20260115_human_ai_ladder/) for the full format and motivation.
28+
29+
The ladder is built from **50 open-source human BattleSnakes** (hosted as `human/*` branches on [CodeClash-ai/BattleSnake](https://github.com/CodeClash-ai/BattleSnake)). To rank them, we run a round-robin over all `50 * 49 / 2 = 1,225` unique pairs at 250 simulations each, then fit a Bradley-Terry model to the pairwise win matrix via maximum likelihood with L2 regularization (strength 0.01, base Elo 1200, slope 400).
30+
31+
<div class="ladder-stats"><div class="ladder-stat"><span class="ladder-stat-num">50</span><span class="ladder-stat-label">human bots</span></div><div class="ladder-stat"><span class="ladder-stat-num">379&#8211;1,883</span><span class="ladder-stat-label">Elo range</span></div><div class="ladder-stat"><span class="ladder-stat-num">1,269</span><span class="ladder-stat-label">median Elo</span></div><div class="ladder-stat"><span class="ladder-stat-num">1,504</span><span class="ladder-stat-label">spread</span></div></div>
32+
33+
The 50 snakes span **379&ndash;1,883 Elo** &mdash; a 1,504-point spread &mdash; but the climb is gradual: the top snake (`robosnake`) leads the runner-up by just 68 Elo, and half the field sits between 968 and 1,433. With no runaway favorite, every rung is a meaningful step up.
34+
35+
<figure class="ladder-figure">
36+
<svg viewBox="0 0 680 250" role="img" aria-label="Histogram of snakes Elo ratings" preserveAspectRatio="xMidYMid meet">
37+
<line class="grid" x1="46" y1="210.0" x2="664" y2="210.0"/>
38+
<text class="tick" x="38" y="214.0" text-anchor="end">0</text>
39+
<line class="grid" x1="46" y1="146.0" x2="664" y2="146.0"/>
40+
<text class="tick" x="38" y="150.0" text-anchor="end">5</text>
41+
<line class="grid" x1="46" y1="82.0" x2="664" y2="82.0"/>
42+
<text class="tick" x="38" y="86.0" text-anchor="end">10</text>
43+
<line class="grid" x1="46" y1="18.0" x2="664" y2="18.0"/>
44+
<text class="tick" x="38" y="22.0" text-anchor="end">15</text>
45+
<path class="bar" d="M47.5,210.0 L47.5,201.2 Q47.5,197.2 51.5,197.2 L92.0,197.2 Q96.0,197.2 96.0,201.2 L96.0,210.0 Z"><title>379 to 504 Elo: 1 bot</title></path>
46+
<path class="bar" d="M99.0,210.0 L99.0,201.2 Q99.0,197.2 103.0,197.2 L143.5,197.2 Q147.5,197.2 147.5,201.2 L147.5,210.0 Z"><title>504 to 630 Elo: 1 bot</title></path>
47+
<path class="bar" d="M150.5,210.0 L150.5,150.0 Q150.5,146.0 154.5,146.0 L195.0,146.0 Q199.0,146.0 199.0,150.0 L199.0,210.0 Z"><title>630 to 755 Elo: 5 bots</title></path>
48+
<path class="bar" d="M202.0,210.0 L202.0,188.4 Q202.0,184.4 206.0,184.4 L246.5,184.4 Q250.5,184.4 250.5,188.4 L250.5,210.0 Z"><title>755 to 880 Elo: 2 bots</title></path>
49+
<path class="bar" d="M253.5,210.0 L253.5,137.2 Q253.5,133.2 257.5,133.2 L298.0,133.2 Q302.0,133.2 302.0,137.2 L302.0,210.0 Z"><title>880 to 1,006 Elo: 6 bots</title></path>
50+
<path class="bar" d="M305.0,210.0 L305.0,162.8 Q305.0,158.8 309.0,158.8 L349.5,158.8 Q353.5,158.8 353.5,162.8 L353.5,210.0 Z"><title>1,006 to 1,131 Elo: 4 bots</title></path>
51+
<path class="bar" d="M356.5,210.0 L356.5,162.8 Q356.5,158.8 360.5,158.8 L401.0,158.8 Q405.0,158.8 405.0,162.8 L405.0,210.0 Z"><title>1,131 to 1,256 Elo: 4 bots</title></path>
52+
<path class="bar" d="M408.0,210.0 L408.0,73.2 Q408.0,69.2 412.0,69.2 L452.5,69.2 Q456.5,69.2 456.5,73.2 L456.5,210.0 Z"><title>1,256 to 1,382 Elo: 11 bots</title></path>
53+
<path class="bar" d="M459.5,210.0 L459.5,98.8 Q459.5,94.8 463.5,94.8 L504.0,94.8 Q508.0,94.8 508.0,98.8 L508.0,210.0 Z"><title>1,382 to 1,507 Elo: 9 bots</title></path>
54+
<path class="bar" d="M511.0,210.0 L511.0,150.0 Q511.0,146.0 515.0,146.0 L555.5,146.0 Q559.5,146.0 559.5,150.0 L559.5,210.0 Z"><title>1,507 to 1,632 Elo: 5 bots</title></path>
55+
<path class="bar" d="M614.0,210.0 L614.0,188.4 Q614.0,184.4 618.0,184.4 L658.5,184.4 Q662.5,184.4 662.5,188.4 L662.5,210.0 Z"><title>1,758 to 1,883 Elo: 2 bots</title></path>
56+
<line class="axis" x1="46" y1="210" x2="664" y2="210" stroke-width="1.5"/>
57+
<text class="tick" x="46.0" y="228.0" text-anchor="middle">379</text>
58+
<text class="tick" x="200.5" y="228.0" text-anchor="middle">755</text>
59+
<text class="tick" x="355.0" y="228.0" text-anchor="middle">1,131</text>
60+
<text class="tick" x="509.5" y="228.0" text-anchor="middle">1,507</text>
61+
<text class="tick" x="664.0" y="228.0" text-anchor="middle">1,883</text>
62+
<line class="median" x1="411.5" y1="18" x2="411.5" y2="210"/>
63+
<text class="median-label" x="417.5" y="28.0" text-anchor="start">median 1,269</text>
64+
<text class="tick" x="355.0" y="246" text-anchor="middle">Elo rating &#8594;</text>
65+
</svg>
66+
<figcaption>Distribution of Elo across the 50 human BattleSnakes. The field climbs fairly evenly, with no single runaway leader.</figcaption>
67+
</figure>
68+
69+
The top ten:
70+
71+
1. human/smallsco/robosnake: **1882.8**
72+
2. human/jhawthorn/snek: **1814.4**
73+
3. human/tyrelh/tyrelh-2019: **1631.7**
74+
4. human/aleksiy325/snek-two: **1617.1**
75+
5. human/hirethissnake/sneaky-snake: **1519.2**
76+
6. human/tbgiles/feisty-snake: **1518.8**
77+
7. human/Petah/project-z: **1516.6**
78+
8. human/woofers/woofers-java: **1500.8**
79+
9. human/noahspriggs/tr-8r: **1472.6**
80+
10. human/tyrelh/tyrelh-2018: **1457.2**
81+
82+
<details>
83+
<summary>Show full BattleSnake rankings</summary>
84+
85+
<ol>
86+
<li>human/smallsco/robosnake: <b>1882.8</b></li>
87+
<li>human/jhawthorn/snek: <b>1814.4</b></li>
88+
<li>human/tyrelh/tyrelh-2019: <b>1631.7</b></li>
89+
<li>human/aleksiy325/snek-two: <b>1617.1</b></li>
90+
<li>human/hirethissnake/sneaky-snake: <b>1519.2</b></li>
91+
<li>human/tbgiles/feisty-snake: <b>1518.8</b></li>
92+
<li>human/Petah/project-z: <b>1516.6</b></li>
93+
<li>human/woofers/woofers-java: <b>1500.8</b></li>
94+
<li>human/noahspriggs/tr-8r: <b>1472.6</b></li>
95+
<li>human/tyrelh/tyrelh-2018: <b>1457.2</b></li>
96+
<li>human/MorganConrad/sisiutl: <b>1451.7</b></li>
97+
<li>human/altersaddle/untimely-neglected-wearable: <b>1447.8</b></li>
98+
<li>human/JerryKott/jerrykott-2017: <b>1427.7</b></li>
99+
<li>human/rdbrck/bountysnake2018: <b>1415.3</b></li>
100+
<li>human/zakwht/zakwht-2018: <b>1395.9</b></li>
101+
<li>human/tyrelh/tyrelh-python: <b>1383.5</b></li>
102+
<li>human/joshhartmann11/battlejake: <b>1381.1</b></li>
103+
<li>human/xtagon/nagini: <b>1376.4</b></li>
104+
<li>human/TheApX/hungry: <b>1369.7</b></li>
105+
<li>human/kentmacdonald2/beames: <b>1364.2</b></li>
106+
<li>human/coreyja/famished-frank: <b>1357.7</b></li>
107+
<li>human/joshhartmann11/battlejake2019: <b>1338.8</b></li>
108+
<li>human/ChaelCodes/cornelius: <b>1330.1</b></li>
109+
<li>human/MorganConrad/tantilla: <b>1305.7</b></li>
110+
<li>human/jackisherwood/battlesnake-elon: <b>1276.4</b></li>
111+
<li>human/Flipez/flipez-crystal: <b>1260.7</b></li>
112+
<li>human/coreyja/gigantic-george: <b>1259.6</b></li>
113+
<li>human/coreyja/eremetic-eric: <b>1252.0</b></li>
114+
<li>human/nbw/nbw-ruby: <b>1193.8</b></li>
115+
<li>human/OliverMKing/astar-snake: <b>1185.7</b></li>
116+
<li>human/coreyja/amphibious-arthur: <b>1182.4</b></li>
117+
<li>human/moxuz/pinky-snek: <b>1100.5</b></li>
118+
<li>human/Spenca/vulture-snake: <b>1051.6</b></li>
119+
<li>human/rdbrck/btas: <b>1045.0</b></li>
120+
<li>human/tim-hub/awesome-snake: <b>1037.1</b></li>
121+
<li>human/zacpez/scape-goat: <b>1001.1</b></li>
122+
<li>human/coreyja/jump-flooding: <b>1001.0</b></li>
123+
<li>human/coreyja/coreyja-rs: <b>969.3</b></li>
124+
<li>human/coreyja/bombastic-bob: <b>965.2</b></li>
125+
<li>human/ccSnake2018/ccsnake: <b>920.8</b></li>
126+
<li>human/Xe/since: <b>892.1</b></li>
127+
<li>human/nbw/nbw-crystal: <b>875.4</b></li>
128+
<li>human/m-schier/kreuzotter: <b>831.8</b></li>
129+
<li>human/coreyja/devious-devin: <b>730.4</b></li>
130+
<li>human/graeme-hill/snakebot: <b>712.5</b></li>
131+
<li>human/coreyja/improbable-irene: <b>702.2</b></li>
132+
<li>human/csauve/bookworm: <b>693.8</b></li>
133+
<li>human/Nettogrof/nessegrev-java: <b>647.3</b></li>
134+
<li>human/Nettogrof/nessegrev-julia: <b>556.2</b></li>
135+
<li>human/pambrose/pambrose-kotlin: <b>379.2</b></li>
136+
</ol>
137+
138+
</details>
139+
140+
**Run it yourself.** [Set up CodeClash](https://docs.codeclash.ai/quickstart/#installation) and send a model up the ladder with:
141+
142+
<pre class="prettyprint lang-bash">
143+
uv run codeclash ladder run configs/ablations/ladder/battlesnake.yaml
144+
</pre>
145+
146+
---
147+
24148
### References
25149

26150
* [BattleSnake Official Documentation](https://docs.battlesnake.com/)

0 commit comments

Comments
 (0)