dsh-eval-guard 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -13
- package/assets/bomberman/workspace.zip +0 -0
- package/assets/commit0/instance.json +30 -0
- package/assets/commit0/workspace.zip +0 -0
- package/assets/ctf/workspace.zip +0 -0
- package/assets/featurebench/hidden/test_regression.py +690 -0
- package/assets/featurebench/instance.json +16 -0
- package/assets/featurebench/workspace.zip +0 -0
- package/assets/swe-bench-pro/hidden/test.patch +36 -0
- package/assets/swe-bench-pro/instance.json +10 -0
- package/assets/swe-bench-pro/workspace.zip +0 -0
- package/assets/tank/workspace.zip +0 -0
- package/eval/README.md +18 -0
- package/eval/arena/arena/README.md +21 -0
- package/eval/arena/arena/bt.py +104 -0
- package/eval/arena/arena/clock.py +15 -0
- package/eval/arena/arena/core.py +265 -0
- package/eval/arena/arena/run.cmd +24 -0
- package/eval/arena/arena/run.sh +11 -0
- package/eval/arena/arena/schedule.py +79 -0
- package/eval/arena/arena/tournament.py +183 -0
- package/eval/arena/bomberman/bots/README.md +16 -0
- package/eval/arena/bomberman/bots/deepseek-v4.1-flash.cpp +447 -0
- package/eval/arena/bomberman/bots/doubao-seed-2.1.cpp +542 -0
- package/eval/arena/bomberman/bots/glm-5.3.cpp +406 -0
- package/eval/arena/bomberman/bots/gpt-6-astra.cpp +768 -0
- package/eval/arena/bomberman/bots/gpt-6-sol.cpp +444 -0
- package/eval/arena/bomberman/bots/kimi-k3.cpp +432 -0
- package/eval/arena/bomberman/bots/mimo-v2.6-pro.cpp +529 -0
- package/eval/arena/bomberman/bots/opus-5.5.cpp +548 -0
- package/eval/arena/bomberman/bots/qwen-3.8-max.cpp +836 -0
- package/eval/arena/bomberman/tournament/README.md +11 -0
- package/eval/arena/bomberman/tournament/bt.py +56 -0
- package/eval/arena/bomberman/tournament/evaluate.py +199 -0
- package/eval/arena/bomberman/tournament/run.py +79 -0
- package/eval/arena/bomberman/tournament/schedule-2to10.json.gz +0 -0
- package/eval/arena/bomberman/workspace/MANIFEST.json +13 -0
- package/eval/arena/bomberman/workspace/README.md +29 -0
- package/eval/arena/bomberman/workspace/RULES.md +100 -0
- package/eval/arena/bomberman/workspace/baseline.cpp +240 -0
- package/eval/arena/bomberman/workspace/clock.py +25 -0
- package/eval/arena/bomberman/workspace/engine/arena.py +198 -0
- package/eval/arena/bomberman/workspace/engine/build.py +35 -0
- package/eval/arena/bomberman/workspace/engine/engine.py +256 -0
- package/eval/arena/bomberman/workspace/engine/verify_replay.py +24 -0
- package/eval/arena/bomberman/workspace/run.cmd +28 -0
- package/eval/arena/bomberman/workspace/run.sh +16 -0
- package/eval/arena/bomberman/workspace/viewer/index.html +42 -0
- package/eval/arena/ctf/bots/README.md +18 -0
- package/eval/arena/ctf/bots/deepseek-v4.1-flash.cpp +601 -0
- package/eval/arena/ctf/bots/doubao-seed-2.1-turbo.cpp +320 -0
- package/eval/arena/ctf/bots/fable-5.1.cpp +634 -0
- package/eval/arena/ctf/bots/glm-5.3.cpp +689 -0
- package/eval/arena/ctf/bots/gpt-6-astra.cpp +657 -0
- package/eval/arena/ctf/bots/gpt-6.1-sol.cpp +725 -0
- package/eval/arena/ctf/bots/kimi-k3.cpp +667 -0
- package/eval/arena/ctf/bots/mimo-v2.6-pro.cpp +533 -0
- package/eval/arena/ctf/bots/opus-5.5.cpp +645 -0
- package/eval/arena/ctf/bots/qwen-3.8-max.cpp +726 -0
- package/eval/arena/ctf/bots/sonnet-5.5.cpp +569 -0
- package/eval/arena/ctf/tournament/README.md +15 -0
- package/eval/arena/ctf/tournament/formal-2to8.json +31 -0
- package/eval/arena/ctf/tournament/formal-9to15.json +31 -0
- package/eval/arena/ctf/workspace/README.md +41 -0
- package/eval/arena/ctf/workspace/RULES.md +119 -0
- package/eval/arena/ctf/workspace/arena.py +186 -0
- package/eval/arena/ctf/workspace/baseline.cpp +257 -0
- package/eval/arena/ctf/workspace/clock.py +15 -0
- package/eval/arena/ctf/workspace/core.py +265 -0
- package/eval/arena/ctf/workspace/engine.py +389 -0
- package/eval/arena/ctf/workspace/run.cmd +24 -0
- package/eval/arena/ctf/workspace/run.sh +11 -0
- package/eval/arena/ctf/workspace/viewer.html +71 -0
- package/eval/arena/land/bots/README.md +17 -0
- package/eval/arena/land/bots/deepseek-4.1f@workbuddy#1/bot.cpp +608 -0
- package/eval/arena/land/bots/glm-5.3@workbuddy#1/bot.cpp +521 -0
- package/eval/arena/land/bots/gpt-6-astra@codex#1/bot.cpp +373 -0
- package/eval/arena/land/bots/gpt-6-sol@codex#1/bot.cpp +341 -0
- package/eval/arena/land/bots/kimi-k3@workbuddy#1/bot.cpp +492 -0
- package/eval/arena/land/bots/mimo-2.6-pro@zcode#1/bot.cpp +652 -0
- package/eval/arena/land/bots/mystery-model@zcode#1/bot.cpp +466 -0
- package/eval/arena/land/bots/opus-5.5@claude-code#1/bot.cpp +630 -0
- package/eval/arena/land/bots/sonnet-5@claude-code#1/bot.cpp +619 -0
- package/eval/arena/land/tournament/make_replay_page.py +17 -0
- package/eval/arena/land/tournament/rate.py +290 -0
- package/eval/arena/land/tournament/round_robin.py +172 -0
- package/eval/arena/land/tournament/sparring.cpp +356 -0
- package/eval/arena/land/workspace/RULES.md +114 -0
- package/eval/arena/land/workspace/TASK.md +46 -0
- package/eval/arena/land/workspace/anchors/.build/greedy_f2e6d2dea5ca +0 -0
- package/eval/arena/land/workspace/anchors/greedy.cpp +194 -0
- package/eval/arena/land/workspace/anchors/random.cpp +80 -0
- package/eval/arena/land/workspace/clock.py +64 -0
- package/eval/arena/land/workspace/engine/build.py +33 -0
- package/eval/arena/land/workspace/engine/game.py +273 -0
- package/eval/arena/land/workspace/engine/referee.py +308 -0
- package/eval/arena/land/workspace/starter/.build/bot_be32b45b4699 +0 -0
- package/eval/arena/land/workspace/starter/bot.cpp +82 -0
- package/eval/arena/land/workspace/viewer/viewer.html +210 -0
- package/eval/arena/tank/bots/README.md +24 -0
- package/eval/arena/tank/bots/half1/deepseek-v4.1-flash.cpp +367 -0
- package/eval/arena/tank/bots/half1/doubao-seed-evolving.cpp +402 -0
- package/eval/arena/tank/bots/half1/gemini-4-argon.cpp +1132 -0
- package/eval/arena/tank/bots/half1/glm-5.3.cpp +551 -0
- package/eval/arena/tank/bots/half1/gpt-6-astra.cpp +233 -0
- package/eval/arena/tank/bots/half1/gpt-6.1-sol-ultrafast.cpp +350 -0
- package/eval/arena/tank/bots/half1/gpt-6.1-sol.cpp +78 -0
- package/eval/arena/tank/bots/half1/grok-4.7.cpp +1099 -0
- package/eval/arena/tank/bots/half1/haiku-5.5.cpp +210 -0
- package/eval/arena/tank/bots/half1/kimi-k3.cpp +353 -0
- package/eval/arena/tank/bots/half1/mimo-v2.6-pro.cpp +336 -0
- package/eval/arena/tank/bots/half1/muse-wonder-full.cpp +560 -0
- package/eval/arena/tank/bots/half1/opus-5.5.cpp +435 -0
- package/eval/arena/tank/bots/half1/qwen-3.8-max.cpp +537 -0
- package/eval/arena/tank/bots/half2/deepseek-v4.1-flash.cpp +425 -0
- package/eval/arena/tank/bots/half2/doubao-seed-evolving.cpp +308 -0
- package/eval/arena/tank/bots/half2/gemini-4-argon.cpp +1390 -0
- package/eval/arena/tank/bots/half2/glm-5.3.cpp +651 -0
- package/eval/arena/tank/bots/half2/gpt-6-astra.cpp +241 -0
- package/eval/arena/tank/bots/half2/gpt-6.1-sol-ultrafast.cpp +356 -0
- package/eval/arena/tank/bots/half2/gpt-6.1-sol.cpp +87 -0
- package/eval/arena/tank/bots/half2/grok-4.7.cpp +1205 -0
- package/eval/arena/tank/bots/half2/haiku-5.5.cpp +210 -0
- package/eval/arena/tank/bots/half2/kimi-k3.cpp +487 -0
- package/eval/arena/tank/bots/half2/mimo-v2.6-pro.cpp +336 -0
- package/eval/arena/tank/bots/half2/muse-wonder-full.cpp +560 -0
- package/eval/arena/tank/bots/half2/opus-5.5.cpp +476 -0
- package/eval/arena/tank/bots/half2/qwen-3.8-max.cpp +392 -0
- package/eval/arena/tank/tournament/README.md +24 -0
- package/eval/arena/tank/tournament/bt.py +218 -0
- package/eval/arena/tank/tournament/final.json +202 -0
- package/eval/arena/tank/tournament/halftime.json +146 -0
- package/eval/arena/tank/tournament/progress.json +911 -0
- package/eval/arena/tank/tournament/schedule.py +100 -0
- package/eval/arena/tank/tournament/sparring.cpp +928 -0
- package/eval/arena/tank/tournament/tournament.py +1426 -0
- package/eval/arena/tank/workspace/README.md +169 -0
- package/eval/arena/tank/workspace/RULES.md +443 -0
- package/eval/arena/tank/workspace/arena.py +862 -0
- package/eval/arena/tank/workspace/baseline.cpp +259 -0
- package/eval/arena/tank/workspace/clock.py +103 -0
- package/eval/arena/tank/workspace/core.py +712 -0
- package/eval/arena/tank/workspace/engine.py +573 -0
- package/eval/arena/tank/workspace/history/.lock +0 -0
- package/eval/arena/tank/workspace/history/20261017-193610-08715287f91f-bot.cpp +109 -0
- package/eval/arena/tank/workspace/history/20261017-193619-f00b2d5635fa-gpt-6-astra.cpp +241 -0
- package/eval/arena/tank/workspace/history/20261017-193643-63319e0a2b1a-gpt-6_1-sol-ultrafast.cpp +356 -0
- package/eval/arena/tank/workspace/history/20261017-193647-41c1341d0a8a-gemini-4-argon.cpp +1390 -0
- package/eval/arena/tank/workspace/history/20261017-193652-e34c0f45539a-gpt-6_1-sol.cpp +87 -0
- package/eval/arena/tank/workspace/history/20261017-193654-c026348ce96e-opus-5_5.cpp +476 -0
- package/eval/arena/tank/workspace/history/20261017-193655-4a21366e94d1-muse-wonder-full.cpp +560 -0
- package/eval/arena/tank/workspace/history/20261017-193657-dbc4e9969c52-mimo-v2_6-pro.cpp +336 -0
- package/eval/arena/tank/workspace/history/20261017-193703-723cd036eb31-grok-4_7.cpp +1205 -0
- package/eval/arena/tank/workspace/history/20261017-193707-1ebbb227be68-deepseek-v4_1-flash.cpp +425 -0
- package/eval/arena/tank/workspace/history/20261017-193709-aeb0e7202ad5-doubao-seed-evolving.cpp +308 -0
- package/eval/arena/tank/workspace/history/20261017-193710-b21ebeb9bc76-kimi-k3.cpp +487 -0
- package/eval/arena/tank/workspace/history/20261017-193712-54cd86531905-haiku-5_5.cpp +210 -0
- package/eval/arena/tank/workspace/history/20261017-193714-efdb8e35c0bf-qwen-3_8-max.cpp +392 -0
- package/eval/arena/tank/workspace/history/20261017-193715-681423c23fdb-glm-5_3.cpp +651 -0
- package/eval/arena/tank/workspace/history/20261017-193717-1a8b3c75181d-sparring.cpp +928 -0
- package/eval/arena/tank/workspace/history/20261017-193720-1e0803a541e8-baseline.cpp +259 -0
- package/eval/arena/tank/workspace/history/log.jsonl +103 -0
- package/eval/arena/tank/workspace/judge/cycles.hpp +53 -0
- package/eval/arena/tank/workspace/judge/fast.cpp +337 -0
- package/eval/arena/tank/workspace/judge/referee.cpp +125 -0
- package/eval/arena/tank/workspace/judge/speed.cpp +99 -0
- package/eval/arena/tank/workspace/run.cmd +31 -0
- package/eval/arena/tank/workspace/run.sh +23 -0
- package/eval/arena/tank/workspace/tank.hpp +1762 -0
- package/eval/arena/tank/workspace/tank_main.cpp +215 -0
- package/eval/arena/tank/workspace/viewer.html +1150 -0
- package/eval/arena/warehouse/workspace/SPEC.md +130 -0
- package/eval/arena/warehouse/workspace/TASK.md +71 -0
- package/eval/arena/warehouse/workspace/baseline/common.h +88 -0
- package/eval/arena/warehouse/workspace/baseline/main.cpp +27 -0
- package/eval/arena/warehouse/workspace/baseline/old_stuff.cpp +87 -0
- package/eval/arena/warehouse/workspace/baseline/sim.cpp +427 -0
- package/eval/arena/warehouse/workspace/baseline/util.cpp +220 -0
- package/eval/arena/warehouse/workspace/clock.py +42 -0
- package/eval/arena/warehouse/workspace/src/common.h +88 -0
- package/eval/arena/warehouse/workspace/src/main.cpp +27 -0
- package/eval/arena/warehouse/workspace/src/old_stuff.cpp +87 -0
- package/eval/arena/warehouse/workspace/src/sim.cpp +427 -0
- package/eval/arena/warehouse/workspace/src/util.cpp +220 -0
- package/eval/arena/warehouse/workspace/tools/bench.py +119 -0
- package/eval/arena/warehouse/workspace/tools/check_input.py +161 -0
- package/eval/arena/warehouse/workspace/tools/gen.py +132 -0
- package/eval/arena/warehouse/workspace/tools/measure.py +107 -0
- package/eval/arena/warehouse/workspace/workloads/public/pub_crowded.in +1420 -0
- package/eval/arena/warehouse/workspace/workloads/public/pub_crowded.out +9162 -0
- package/eval/arena/warehouse/workspace/workloads/public/pub_dynamic.in +1465 -0
- package/eval/arena/warehouse/workspace/workloads/public/pub_dynamic.out +3439 -0
- package/eval/arena/warehouse/workspace/workloads/public/pub_flood.in +2757 -0
- package/eval/arena/warehouse/workspace/workloads/public/pub_flood.out +3126 -0
- package/eval/arena/warehouse/workspace/workloads/public/pub_small.in +731 -0
- package/eval/arena/warehouse/workspace/workloads/public/pub_small.out +2578 -0
- package/eval/arena/warehouse/workspace/workloads/public/pub_wide.in +528 -0
- package/eval/arena/warehouse/workspace/workloads/public/pub_wide.out +2026 -0
- package/eval/bomberman.py +20 -0
- package/eval/commit0.py +21 -0
- package/eval/common.py +61 -0
- package/eval/ctf.py +20 -0
- package/eval/featurebench.py +25 -0
- package/eval/land.py +20 -0
- package/eval/legacy/bomberman-prices.json +4 -0
- package/eval/legacy/bomberman.py +161 -0
- package/eval/legacy/commit0.py +91 -0
- package/eval/legacy/ctf-prices.json +4 -0
- package/eval/legacy/ctf.py +178 -0
- package/eval/legacy/featurebench.py +103 -0
- package/eval/legacy/land-prices.json +4 -0
- package/eval/legacy/land.py +177 -0
- package/eval/legacy/swe_bench_pro.py +116 -0
- package/eval/legacy/tank-prices.json +3 -0
- package/eval/legacy/tank.py +408 -0
- package/eval/legacy/warehouse-prices.json +4 -0
- package/eval/legacy/warehouse.py +365 -0
- package/eval/swe-bench-pro.py +25 -0
- package/eval/tank.py +20 -0
- package/eval/warehouse.py +20 -0
- package/lib/client/index.js +376 -63
- package/lib/client/index.js.map +1 -1
- package/lib/index.js +684 -27
- package/package.json +2 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# 找一个 Python 3.10 以上,在本目录运行给定的脚本。不带参数时显示开发用时。
|
|
3
|
+
cd "$(dirname -- "$0")" || exit 1
|
|
4
|
+
for py in python3 python; do
|
|
5
|
+
if command -v "$py" >/dev/null 2>&1 && "$py" -c 'import sys; sys.exit(sys.version_info < (3, 10))' 2>/dev/null; then
|
|
6
|
+
[ "$#" -eq 0 ] && set -- clock.py
|
|
7
|
+
exec "$py" -X utf8 "$@"
|
|
8
|
+
fi
|
|
9
|
+
done
|
|
10
|
+
echo '没有找到 Python 3.10 以上的版本。请把情况告诉组织方。' >&2
|
|
11
|
+
exit 1
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
3
|
+
<title>夺旗回放</title>
|
|
4
|
+
<style>
|
|
5
|
+
:root{color-scheme:dark;--bg:#0f141c;--panel:#18202c;--line:#2a3547;--ink:#e6ecf5;--muted:#93a1b5;font-family:"Segoe UI","Microsoft YaHei",sans-serif}
|
|
6
|
+
*{box-sizing:border-box}body{margin:0;padding:18px;background:var(--bg);color:var(--ink)}
|
|
7
|
+
header{display:flex;flex-wrap:wrap;gap:10px 18px;align-items:baseline;margin-bottom:12px}h1{font-size:22px;margin:0}.muted{color:var(--muted);font-size:12px}
|
|
8
|
+
.layout{display:grid;grid-template-columns:minmax(360px,1fr) 340px;gap:14px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px}
|
|
9
|
+
canvas{width:100%;display:block;border-radius:6px;background:#121a26}
|
|
10
|
+
.controls{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:10px}
|
|
11
|
+
button,select,input{background:#253247;color:var(--ink);border:1px solid #3c4d68;border-radius:6px;padding:6px 9px;font:inherit;font-size:13px}
|
|
12
|
+
button{cursor:pointer}button:hover{background:#30405a}input[type=range]{flex:1;min-width:160px;padding:0}
|
|
13
|
+
.team{display:flex;justify-content:space-between;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:13px}.team:hover,.team.on{background:#243044}
|
|
14
|
+
.team b{font-size:16px}.sw{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px}
|
|
15
|
+
h2{font-size:13px;color:var(--muted);margin:12px 0 6px}#events,#orders{font-size:12px;line-height:1.7;max-height:190px;overflow:auto;white-space:pre-wrap}
|
|
16
|
+
@media(max-width:860px){.layout{grid-template-columns:1fr}body{padding:10px}}
|
|
17
|
+
</style></head><body>
|
|
18
|
+
<header><h1>夺旗回放</h1><span class="muted" id="sub"></span></header>
|
|
19
|
+
<div class="layout">
|
|
20
|
+
<section class="panel"><canvas id="board"></canvas>
|
|
21
|
+
<div class="controls"><button id="play">播放</button><button id="prev">◀</button><button id="next">▶</button>
|
|
22
|
+
<input id="seek" type="range" min="0" value="0" aria-label="回合"><span id="turn"></span>
|
|
23
|
+
<select id="speed" aria-label="速度"><option value="1">1×</option><option value="3" selected>3×</option><option value="8">8×</option><option value="20">20×</option></select></div>
|
|
24
|
+
<div class="controls"><select id="keys" aria-label="关键回合"><option value="">跳到关键回合…</option></select></div>
|
|
25
|
+
<div class="muted" style="margin-top:8px">圆点 = 角色(数字为 id),金环 = 携旗,星形 = 地上的旗,淡色方块 = 基地,虚线圈 = 旗点。点右侧阵营可高亮。←→ 逐回合,空格播放。</div>
|
|
26
|
+
</section>
|
|
27
|
+
<aside class="panel"><h2>阵营与得分</h2><div id="teams"></div><h2>本回合事件</h2><div id="events"></div><h2>指令</h2><div id="orders"></div></aside>
|
|
28
|
+
</div>
|
|
29
|
+
<script>
|
|
30
|
+
const R=/*__REPLAY__*/null;
|
|
31
|
+
const C=['#ff6b7f','#5ab4ff','#7bd99b','#d7a2ff','#ffcb6b','#5fd9d4','#ff9fd0','#b5cc6e','#a9aeff','#f09c63','#e0e0e0','#8fb3c9','#e8d38a','#c98fa8','#8fd6b2'];
|
|
32
|
+
const $=id=>document.getElementById(id),cv=$('board'),g=cv.getContext('2d');
|
|
33
|
+
let i=0,playing=false,last=0,focus=-1;
|
|
34
|
+
const MV={N:'上',S:'下',E:'右',W:'左',WAIT:'停'},AC={attack:'攻击',pickup:'拾旗',drop:'丢旗',wait:''};
|
|
35
|
+
const name=t=>R.names[t]??('阵营'+t);
|
|
36
|
+
function ev(e){switch(e.type){case'capture':return`★ ${name(e.team)} 交旗(角色${e.unit},旗${e.flag})`;case'pickup':return`角色${e.unit} 拿到旗${e.flag}`;case'drop':return`角色${e.unit} 放下旗${e.flag}`;case'death':return`✖ 角色${e.unit} 阵亡${e.flag!==null?',掉落旗'+e.flag:''}(击杀:${e.by.join('、')})`;case'attack':return`角色${e.unit} → 角色${e.target}`;case'respawn':return`角色${e.unit} 重生`;case'return':return`旗${e.flag} 回位`;default:return JSON.stringify(e)}}
|
|
37
|
+
function render(){
|
|
38
|
+
const f=R.frames[i],H=R.header,n=H.size,s=Math.max(10,Math.floor(760/n));cv.width=cv.height=n*s;
|
|
39
|
+
for(let y=0;y<n;y++)for(let x=0;x<n;x++){g.fillStyle=H.map[y][x]==='#'?'#3e4c63':((x+y)%2?'#16202e':'#182333');g.fillRect(x*s,y*s,s,s)}
|
|
40
|
+
H.bases.forEach((b,t)=>{g.fillStyle=C[t%15]+(focus<0||focus===t?'55':'22');for(const[x,y]of b)g.fillRect(x*s,y*s,s,s)});
|
|
41
|
+
g.setLineDash([3,3]);g.strokeStyle='#ffe08a88';for(const[x,y]of H.flag_spots){g.beginPath();g.arc((x+.5)*s,(y+.5)*s,s*.42,0,7);g.stroke()}g.setLineDash([]);
|
|
42
|
+
for(const e of f.events)if(e.type==='attack'){const a=f.units[e.unit],b=f.units[e.target];const pa=a.pos,pb=b.pos||(f.events.find(z=>z.type==='death'&&z.unit===e.target)||{}).pos;if(pa&&pb){g.strokeStyle='#ffe7a0';g.lineWidth=2;g.beginPath();g.moveTo((pa[0]+.5)*s,(pa[1]+.5)*s);g.lineTo((pb[0]+.5)*s,(pb[1]+.5)*s);g.stroke()}}
|
|
43
|
+
for(const fl of f.flags)if(fl.pos){const[x,y]=fl.pos;star((x+.5)*s,(y+.5)*s,s*.38,'#ffd75e')}
|
|
44
|
+
for(const e of f.events)if(e.type==='death'){const[x,y]=e.pos;g.strokeStyle='#ffb070';g.lineWidth=2;g.beginPath();g.moveTo(x*s+3,y*s+3);g.lineTo(x*s+s-3,y*s+s-3);g.moveTo(x*s+s-3,y*s+3);g.lineTo(x*s+3,y*s+s-3);g.stroke()}
|
|
45
|
+
for(const u of f.units){if(!u.pos)continue;const t=Math.floor(u.id/3),[x,y]=u.pos,cx=(x+.5)*s,cy=(y+.5)*s;g.globalAlpha=focus<0||focus===t?1:.25;
|
|
46
|
+
g.fillStyle=C[t%15];g.beginPath();g.arc(cx,cy,s*.36,0,7);g.fill();if(u.flag!==null){g.strokeStyle='#ffd75e';g.lineWidth=3;g.beginPath();g.arc(cx,cy,s*.48,0,7);g.stroke()}
|
|
47
|
+
g.fillStyle='#0b111a';g.font=`bold ${Math.max(8,s*.36)}px sans-serif`;g.textAlign='center';g.textBaseline='middle';g.fillText(u.id,cx,cy+1);
|
|
48
|
+
g.fillStyle='#0b111a';g.fillRect(x*s+2,y*s+1,s-4,2);g.fillStyle=u.hp>50?'#8fe3b5':'#ffc56b';g.fillRect(x*s+2,y*s+1,(s-4)*u.hp/H.rules.hp,2)}
|
|
49
|
+
g.globalAlpha=1;
|
|
50
|
+
$('turn').textContent=`${f.turn} / ${R.frames.at(-1).turn}`;$('seek').value=i;
|
|
51
|
+
const order=[...Array(H.teams).keys()].sort((a,b)=>f.score[b]-f.score[a]);
|
|
52
|
+
$('teams').replaceChildren(...order.map(t=>{const d=document.createElement('div');d.className='team'+(focus===t?' on':'');d.onclick=()=>{focus=focus===t?-1:t;render()};
|
|
53
|
+
const alive=f.units.filter(u=>Math.floor(u.id/3)===t).map(u=>u.pos?(u.flag!==null?'⚑':'●'):'○').join('');
|
|
54
|
+
d.innerHTML=`<span><span class="sw" style="background:${C[t%15]}"></span>${esc(name(t))} <span class="muted">${alive}</span></span><b>${f.score[t]}</b>`;return d}));
|
|
55
|
+
$('events').textContent=f.events.filter(e=>e.type!=='attack'||focus<0||Math.floor(e.unit/3)===focus).map(ev).join('\n')+(f.faults?'\n'+f.faults.map(x=>`程序故障 ${name(x.team)}:${x.reason}`).join('\n'):'')||'无';
|
|
56
|
+
$('orders').textContent=Object.entries(f.orders).filter(([t])=>focus<0||+t===focus).map(([t,cs])=>`${name(+t)}:`+cs.map(c=>`${c.id} ${MV[c.move]??'停'}${AC[c.act]?' '+AC[c.act]:''}${c.act==='attack'?' '+c.target:''}${c.note?'「'+c.note+'」':''}`).join(',')).join('\n')||'—';
|
|
57
|
+
}
|
|
58
|
+
function star(x,y,r,col){g.fillStyle=col;g.beginPath();for(let k=0;k<10;k++){const a=Math.PI/5*k-Math.PI/2,rr=k%2?r*.45:r;g.lineTo(x+rr*Math.cos(a),y+rr*Math.sin(a))}g.fill()}
|
|
59
|
+
function esc(t){return String(t).replace(/[&<>]/g,c=>({'&':'&','<':'<','>':'>'}[c]))}
|
|
60
|
+
function go(k){playing=false;$('play').textContent='播放';i=Math.max(0,Math.min(R.frames.length-1,k));render()}
|
|
61
|
+
function tick(t){if(playing&&t-last>=300/+$('speed').value){last=t;if(i<R.frames.length-1){i++;render()}else go(i)}requestAnimationFrame(tick)}
|
|
62
|
+
if(R){
|
|
63
|
+
$('sub').textContent=`${R.header.teams} 方 · 地图 ${R.header.size}×${R.header.size} · 种子 ${R.header.seed} · 最终得分 ${R.result.score.join(' / ')}`;
|
|
64
|
+
$('seek').max=R.frames.length-1;
|
|
65
|
+
R.frames.forEach((f,k)=>{const es=f.events.filter(e=>e.type==='capture'||(e.type==='death'&&e.flag!==null));if(es.length){const o=document.createElement('option');o.value=k;o.textContent=`${f.turn} 回合:${es.map(ev).join(';')}`;$('keys').append(o)}});
|
|
66
|
+
$('play').onclick=()=>{if(i===R.frames.length-1)i=0;playing=!playing;$('play').textContent=playing?'暂停':'播放'};
|
|
67
|
+
$('prev').onclick=()=>go(i-1);$('next').onclick=()=>go(i+1);$('seek').oninput=e=>go(+e.target.value);$('keys').onchange=e=>{if(e.target.value!=='')go(+e.target.value)};
|
|
68
|
+
addEventListener('keydown',e=>{if(e.target.tagName==='SELECT'||e.target.tagName==='INPUT')return;if(e.key==='ArrowRight')go(i+1);if(e.key==='ArrowLeft')go(i-1);if(e.key===' '){e.preventDefault();$('play').click()}});
|
|
69
|
+
render();requestAnimationFrame(tick)
|
|
70
|
+
}else $('sub').textContent='这是回放模板,请打开对战后生成的 HTML 文件。';
|
|
71
|
+
</script></body></html>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 各模型的交卷代码
|
|
2
|
+
|
|
3
|
+
都是模型在比赛中独立写出的原样代码,主办方没有改动。文件夹名是正式赛里的编号(`模型@工具#第几次`),赛事脚本和逐局结果都用这个编号。
|
|
4
|
+
|
|
5
|
+
| 文件夹 | 模型 | 工具 |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `sonnet-5@claude-code#1` | Sonnet 5.5(日志模型 ID 是 `claude-sonnet-5`,实际被灰度到 5.5,见 `../CONDITIONS.md` 注 1) | Claude Code |
|
|
8
|
+
| `gpt-6-astra@codex#1` | GPT-6 Astra | Codex |
|
|
9
|
+
| `opus-5.5@claude-code#1` | Opus 5.5 | Claude Code |
|
|
10
|
+
| `gpt-6-sol@codex#1` | GPT-6 Sol | Codex |
|
|
11
|
+
| `mimo-2.6-pro@zcode#1` | MiMo V2.6 Pro | ZCode |
|
|
12
|
+
| `kimi-k3@workbuddy#1` | Kimi K3 | WorkBuddy |
|
|
13
|
+
| `glm-5.3@workbuddy#1` | GLM 5.3 | WorkBuddy |
|
|
14
|
+
| `mystery-model@zcode#1` | Spacebunny(OpenRouter 隐身模型,后确认为 MiniMax M3.1 Flash) | ZCode |
|
|
15
|
+
| `deepseek-4.1f@workbuddy#1` | DeepSeek V4.1 Flash | WorkBuddy |
|
|
16
|
+
|
|
17
|
+
基准 bot 在 `../workspace/anchors/`(random、greedy),出题方陪练 bot 在 `../tournament/sparring.cpp`。
|