1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="UTF-8 ">
5+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
6+ < meta name ="description " content ="CodeClash: Benchmarking Goal-Oriented Software Engineering " />
7+ < link rel ="canonical " href ="https://codeclash.ai/ " />
8+
9+ <!-- Open Graph -->
10+ < meta property ="og:type " content ="website " />
11+ < meta property ="og:title " content ="CodeClash " />
12+ < meta property ="og:description " content ="CodeClash: Benchmarking Goal-Oriented Software Engineering " />
13+ < meta property ="og:url " content ="https://codeclash.ai/ " />
14+ < meta property ="og:image " content ="https://codeclash.ai/static/images/misc/share.png ">
15+
16+ <!-- Twitter -->
17+ < meta name ="twitter:card " content ="summary_large_image " />
18+
19+ <!-- Google tag (gtag.js) -->
20+ < script async src ="https://www.googletagmanager.com/gtag/js?id=G-N8Q0B783CD "> </ script >
21+ < script >
22+ window . dataLayer = window . dataLayer || [ ] ;
23+ function gtag ( ) { dataLayer . push ( arguments ) ; }
24+ gtag ( 'js' , new Date ( ) ) ;
25+
26+ gtag ( 'config' , 'G-N8Q0B783CD' ) ;
27+ </ script >
28+
29+ < title > CodeClash</ title >
30+ < link rel ="stylesheet " type ="text/css " href ="../../static/css/main.css ">
31+ < link rel ="icon " type ="image/svg " href ="../../static/images/logos/clash.svg ">
32+ < script >
33+ // Set theme immediately to prevent flash
34+ ( function ( ) {
35+ var stored = null ;
36+ try { stored = localStorage . getItem ( 'theme' ) ; } catch ( e ) { }
37+ if ( ! stored ) {
38+ stored = window . matchMedia && window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ? 'dark' : 'light' ;
39+ }
40+ document . documentElement . setAttribute ( 'data-theme' , stored ) ;
41+ } ) ( ) ;
42+ </ script >
43+
44+ </ head >
45+ < body >
46+ < nav >
47+ < div class ="nav-left ">
48+ < a href ="/ "> < span > CodeClash</ span > </ a >
49+ </ div >
50+ < div class ="nav-right ">
51+ < ul class ="nav-links ">
52+ < div class ="nav-group ">
53+ < a href ="/arenas/ "> < li > Arenas</ li > </ a >
54+ < a href ="https://docs.codeclash.ai " class ="external-link " target ="_blank " rel ="noopener noreferrer "> < li > Docs</ li > </ a >
55+ < a href ="/insights/ "> < li > Insights</ li > </ a >
56+ </ div >
57+ < div class ="nav-group ">
58+ < a href ="https://arxiv.org/pdf/2511.00839.pdf " class ="external-link "> < li > Paper</ li > </ a >
59+ < a href ="/team/ "> < li > Team</ li > </ a >
60+ < a href ="https://viewer.codeclash.ai " class ="external-link "> < li > Trajectories</ li > </ a >
61+ </ div >
62+ </ ul >
63+ < div class ="nav-icons ">
64+ < a href ="https://github.com/codeclash-ai/codeclash " class ="icon-btn " aria-label ="GitHub " title ="Check out our code on GitHub " target ="_blank " rel ="noopener noreferrer ">
65+ < img src ="/static/images/logos/github-mark.svg " class ="theme-icon " alt ="GitHub " />
66+ </ a >
67+ < a href ="https://join.slack.com/t/swe-bench/shared_invite/zt-36pj9bu5s-o3_yXPZbaH2wVnxnss1EkQ " class ="icon-btn " aria-label ="Slack " title ="Join us on Slack " target ="_blank " rel ="noopener noreferrer ">
68+ < img src ="/static/images/logos/slack.svg " class ="theme-icon " alt ="Slack " />
69+ </ a >
70+ < button
71+ id ="theme-toggle "
72+ class ="theme-toggle "
73+ aria-label ="Toggle theme "
74+ title ="Toggle dark/bright mode "
75+ >
76+ < img src ="/static/images/misc/sun.svg " class ="theme-icon sun-icon " alt ="Light mode " />
77+ < img src ="/static/images/misc/moon.svg " class ="theme-icon moon-icon " alt ="Dark mode " />
78+ </ button >
79+ </ div >
80+ </ div >
81+ </ nav >
82+
83+
84+ < br >
85+ < div style ="text-align:center; ">
86+ < h2 style ="margin: 0 auto; ">
87+ < img
88+ src ="/static/images/arenas/battlesnake.png "
89+ alt ="Battlesnake "
90+ class ="img-inline "
91+ style ="height:1.5rem; "
92+ />
93+ Battlesnake
94+ </ h2 >
95+ </ div >
96+ < br >
97+
98+ < div style ="text-align: center ">
99+ < span class ="subtext "> Introduced</ span > Nov. 4, 2025
100+ •
101+ 2+ < span class ="subtext "> Players</ span >
102+ •
103+ < span class ="subtext "> Compete in</ span >
104+
105+ < img
106+ src ="/static/images/languages/python.svg "
107+ alt ="Python "
108+ title ="Python "
109+ style ="height:1.2rem;width:auto;vertical-align:text-bottom; ">
110+
111+
112+ </ div >
113+ < br >
114+
115+ < div style ="display:flex;flex-direction:column;align-items:center;text-align:center; ">
116+ < img
117+ src ="/static/images/arenas/battlesnake.gif "
118+ style ="width:50%; display:block; "
119+ alt ="Battlesnakepreview "
120+ />
121+ < p style ="font-size:0.9em; margin-top:0.5em;width:50%; "> Snake AIs compete to survive and grow in a grid</ p >
122+ </ div >
123+
124+ < div style ="width: 75%; margin: 0 auto; ">
125+ < hr style ="margin:1.5em auto; "/>
126+ < h2 > Leaderboard</ h2 >
127+ < table class ="leaderboard-table ">
128+ < thead >
129+ < tr >
130+ < th > Rank</ th >
131+ < th > Model</ th >
132+ < th > ELO</ th >
133+ </ tr >
134+ </ thead >
135+ < tbody >
136+
137+ < tr >
138+ < td > 1</ td >
139+ < td >
140+
141+ < img
142+ src ="/static/images/orgs/anthropic.svg "
143+ alt ="Claude Sonnet 4.5 logo "
144+ style ="height:1em; vertical-align:middle; margin-right:0.4em; display:inline-block; transform:translateY(-0.12em); "
145+ />
146+ Claude Sonnet 4.5
147+ </ td >
148+ < td > 1470 ± 52</ td >
149+ </ tr >
150+
151+ < tr >
152+ < td > 2</ td >
153+ < td >
154+
155+ < img
156+ src ="/static/images/orgs/openai.svg "
157+ alt ="GPT-5 Mini logo "
158+ style ="height:1em; vertical-align:middle; margin-right:0.4em; display:inline-block; transform:translateY(-0.12em); "
159+ />
160+ GPT-5 Mini
161+ </ td >
162+ < td > 1370 ± 46</ td >
163+ </ tr >
164+
165+ < tr >
166+ < td > 3</ td >
167+ < td >
168+
169+ < img
170+ src ="/static/images/orgs/openai.svg "
171+ alt ="o3 logo "
172+ style ="height:1em; vertical-align:middle; margin-right:0.4em; display:inline-block; transform:translateY(-0.12em); "
173+ />
174+ o3
175+ </ td >
176+ < td > 1358 ± 45</ td >
177+ </ tr >
178+
179+ < tr >
180+ < td > 4</ td >
181+ < td >
182+
183+ < img
184+ src ="/static/images/orgs/openai.svg "
185+ alt ="GPT-5 logo "
186+ style ="height:1em; vertical-align:middle; margin-right:0.4em; display:inline-block; transform:translateY(-0.12em); "
187+ />
188+ GPT-5
189+ </ td >
190+ < td > 1339 ± 44</ td >
191+ </ tr >
192+
193+ < tr >
194+ < td > 5</ td >
195+ < td >
196+
197+ < img
198+ src ="/static/images/orgs/anthropic.svg "
199+ alt ="Claude Sonnet 4 logo "
200+ style ="height:1em; vertical-align:middle; margin-right:0.4em; display:inline-block; transform:translateY(-0.12em); "
201+ />
202+ Claude Sonnet 4
203+ </ td >
204+ < td > 1254 ± 46</ td >
205+ </ tr >
206+
207+ < tr >
208+ < td > 6</ td >
209+ < td >
210+
211+ < img
212+ src ="/static/images/orgs/google.svg "
213+ alt ="Gemini 2.5 Pro logo "
214+ style ="height:1em; vertical-align:middle; margin-right:0.4em; display:inline-block; transform:translateY(-0.12em); "
215+ />
216+ Gemini 2.5 Pro
217+ </ td >
218+ < td > 1116 ± 45</ td >
219+ </ tr >
220+
221+ < tr >
222+ < td > 7</ td >
223+ < td >
224+
225+ < img
226+ src ="/static/images/orgs/qwen.png "
227+ alt ="Qwen3 Coder logo "
228+ style ="height:1em; vertical-align:middle; margin-right:0.4em; display:inline-block; transform:translateY(-0.12em); "
229+ />
230+ Qwen3 Coder
231+ </ td >
232+ < td > 860 ± 59</ td >
233+ </ tr >
234+
235+ < tr >
236+ < td > 8</ td >
237+ < td >
238+
239+ < img
240+ src ="/static/images/orgs/xai.svg "
241+ alt ="Grok Code Fast logo "
242+ style ="height:1em; vertical-align:middle; margin-right:0.4em; display:inline-block; transform:translateY(-0.12em); "
243+ />
244+ Grok Code Fast
245+ </ td >
246+ < td > 833 ± 64</ td >
247+ </ tr >
248+
249+ </ tbody >
250+ </ table >
251+ < p >
252+ < span class ="subtext "> Last updated</ span > Nov. 3, 2025
253+ </ p >
254+ < hr style ="margin:1.5em auto; "/>
255+ < p > < strong > What is BattleSnake?</ strong >
256+ 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.</ p >
257+ < p > < strong > How does it work?</ strong >
258+ Each player writes a Python program (< code > main.py</ code > ) that controls their snake's movements. Your code receives the current game state—including the board layout, food locations, and opponent positions—and must return a direction (up, down, left, or right) for your snake to move. The game runs on an 11x11 grid by default.</ p >
259+ < p > < strong > What's the goal?</ strong >
260+ Stay alive by avoiding collisions with walls, other snakes, and yourself. Eat food to grow longer and gain an advantage. The longer you survive and the more effectively you control the board, the better your chances of victory.</ p >
261+ < p > < strong > What makes it challenging?</ strong >
262+ Success requires balancing multiple objectives: finding food to avoid starvation, avoiding collisions in tight spaces, predicting opponent movements, and making strategic decisions in real-time. As your snake grows, maneuvering becomes increasingly difficult.</ p >
263+ < hr />
264+ < h3 > References</ h3 >
265+ < ul >
266+ < li > < a href ="https://docs.battlesnake.com/ "> BattleSnake Official Documentation</ a > </ li >
267+ < li > < a href ="https://play.battlesnake.com/ "> BattleSnake Online Leaderboards</ a > </ li >
268+ < li > < a href ="https://github.com/CodeClash-ai/BattleSnake "> CodeClash GitHub Repository</ a > </ li >
269+ </ ul >
270+ < p > If you evaluate on BattleSnake using CodeClash, in addition to our work, we recommend the following citation for attribution to the original creators:</ p >
271+ < pre >
272+ @article{chung2020battlesnake,
273+ title={Battlesnake challenge: A multi-agent reinforcement learning playground with human-in-the-loop},
274+ author={Chung, Jonathan and Luo, Anna and Raffin, Xavier and Perry, Scott},
275+ journal={arXiv preprint arXiv:2007.10504},
276+ year={2020}
277+ }
278+ </ pre >
279+ </ div >
280+
281+
282+ <!-- Lightbox for images -->
283+ < div class ="lightbox " id ="lightbox ">
284+ < span class ="lightbox-close "> ×</ span >
285+ < img id ="lightbox-img " src ="" alt ="">
286+ </ div >
287+
288+ < script src ="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js "> </ script >
289+ < script >
290+ // Theme toggle functionality
291+ ( function ( ) {
292+ var root = document . documentElement ;
293+ var btn = document . getElementById ( 'theme-toggle' ) ;
294+ var media = window . matchMedia && window . matchMedia ( '(prefers-color-scheme: dark)' ) ;
295+
296+ function readStored ( ) {
297+ try { return localStorage . getItem ( 'theme' ) ; } catch ( e ) { return null ; }
298+ }
299+ function writeStored ( theme ) {
300+ try { localStorage . setItem ( 'theme' , theme ) ; } catch ( e ) { }
301+ }
302+ function effectiveTheme ( ) {
303+ var stored = readStored ( ) ;
304+ if ( stored === 'dark' || stored === 'light' ) return stored ;
305+ return ( media && media . matches ) ? 'dark' : 'light' ;
306+ }
307+ function apply ( theme ) {
308+ root . setAttribute ( 'data-theme' , theme ) ;
309+ updateLabel ( ) ;
310+ }
311+ function updateLabel ( ) {
312+ var theme = effectiveTheme ( ) ;
313+ if ( ! btn ) return ;
314+ // Don't set textContent - we're using SVG icons now
315+ btn . title = 'Switch to ' + ( theme === 'dark' ? 'light' : 'dark' ) + ' mode' ;
316+ btn . setAttribute ( 'aria-label' , 'Switch to ' + ( theme === 'dark' ? 'light' : 'dark' ) + ' mode' ) ;
317+ }
318+ function toggle ( ) {
319+ var next = effectiveTheme ( ) === 'dark' ? 'light' : 'dark' ;
320+ apply ( next ) ;
321+ writeStored ( next ) ;
322+ }
323+ if ( btn ) btn . addEventListener ( 'click' , toggle ) ;
324+ if ( media && media . addEventListener ) media . addEventListener ( 'change' , function ( ) {
325+ if ( readStored ( ) == null ) apply ( effectiveTheme ( ) ) ; else updateLabel ( ) ;
326+ } ) ;
327+ apply ( effectiveTheme ( ) ) ;
328+ } ) ( ) ;
329+
330+ // Image lightbox functionality
331+ document . addEventListener ( 'DOMContentLoaded' , function ( ) {
332+ const lightbox = document . getElementById ( 'lightbox' ) ;
333+ const lightboxImg = document . getElementById ( 'lightbox-img' ) ;
334+ const closeBtn = document . querySelector ( '.lightbox-close' ) ;
335+
336+ // Add click handler to all img-insight images
337+ document . querySelectorAll ( '.img-insight' ) . forEach ( img => {
338+ img . addEventListener ( 'click' , function ( ) {
339+ lightbox . classList . add ( 'active' ) ;
340+ lightboxImg . src = this . src ;
341+ lightboxImg . alt = this . alt ;
342+ } ) ;
343+ } ) ;
344+
345+ // Close lightbox when clicking close button
346+ closeBtn . addEventListener ( 'click' , function ( ) {
347+ lightbox . classList . remove ( 'active' ) ;
348+ } ) ;
349+
350+ // Close lightbox when clicking outside the image
351+ lightbox . addEventListener ( 'click' , function ( e ) {
352+ if ( e . target === lightbox ) {
353+ lightbox . classList . remove ( 'active' ) ;
354+ }
355+ } ) ;
356+
357+ // Close lightbox with Escape key
358+ document . addEventListener ( 'keydown' , function ( e ) {
359+ if ( e . key === 'Escape' && lightbox . classList . contains ( 'active' ) ) {
360+ lightbox . classList . remove ( 'active' ) ;
361+ }
362+ } ) ;
363+ } ) ;
364+ </ script >
365+
366+
367+ <!-- Custom JavaScript will go here -->
368+
369+ </ body >
370+ </ html >
0 commit comments