Package Control

The official Sublime Text package manager.

Algorithm Competition Assistant

一个基于FastOlympicCoding插件的优化插件,适用于Sublime Text

By chenmoulaile
Created September 4, 2026, last updated October 11, 2026.

SepAugJulJunMayAprMarFebJan Dec2025 NovOct 2026-W42 | installs: 2 | removals: 1 | upgrades: 0 2026-W42 | installs: 2 | removals: 1 | upgrades: 0 2026-W42 | installs: 2 | removals: 1 | upgrades: 0 2026-W41 | installs: 0 | removals: 0 | upgrades: 0 2026-W41 | installs: 0 | removals: 0 | upgrades: 0 2026-W41 | installs: 0 | removals: 0 | upgrades: 0 024 WeeklyInstalls 024 WeeklyUpgrades 2026-W41 | upgrades: 0 2.4.10 / 2.4.9 / ... 2.4.10 / 2.4.9 / 2.4.8 / 2.4.6 / 2.4.5 / 2.4.4 / 2.4.3 / 2.4.2 / 2.4.1 / 2.4.0 / 2.3.0 / 2.2.0 2026-W40 2.1.1 / 2.1.0 / ... 2.1.1 / 2.1.0 / 2.0.1 / 1.4.19 / 1.4.18 / 1.4.17 / 1.4.16 / 1.4.15 / 1.4.14 / 1.4.13 / 1.4.12 / 1.4.11 / 1.4.10 / 1.4.9 / 1.4.8 / 1.4.7 / 1.4.6 / 1.4.5 / 1.4.4 / 1.4.3 / 1.4.2 / 1.4.1 / 1.4.0 / 1.3.2 2026-W39 1.3.1 / 1.3.0 / ... 1.3.1 / 1.3.0 / 1.2.2 / 1.2.1 / 1.2.0 / 1.1.0 / 1.0.7 2026-W36 1.0.6 / 1.0.5 / ... 1.0.6 / 1.0.5 / 1.0.4 / 1.0.3 / 1.0.2 / 1.0.1 / 1.0.0
Installations: 2 in total
Installations minus removals
Upgrades

Links

Versions

2.4.10 (>ST4094) ·
2026-10-11 14:20

More

Algorithm Competition Assistant

Sublime Text 上更「能打」的算法竞赛测评插件 —— 一个测试点卡片 + 彩色 verdict + 逐行 diff 详情 + 真实内存/超时判定的完整闭环。

基于什么开发:本插件是 FastOlympicCoding(Jatana)的深度二次开发版本, 参考 VSCode 的 cph-ng 重做了判题结果显示(彩色 verdict、详情面板、逐行 diff), 并借鉴 FastOlympicCodingHook 集成了 Competitive Companion 浏览器插件支持。


English

Algorithm Competition Assistant is a competitive-programming test runner for Sublime Text 4 (build 4095+). It is a rework of FastOlympicCoding (Jatana), with the verdict display rebuilt after VSCode's cph-ng, and Competitive Companion support inspired by FastOlympicCodingHook.

Getting started: open a source file, then use Ctrl+Shift+P → cph (every command is in the command palette) or the View → Algorithm Competition Assistant menu. The default run_settings cover C++ (g++, -std=c++17 -O2), Python, Java, C, Rust, Go, Pascal and JavaScript (Node.js) — edit them under Preferences → Package Settings → Algorithm Competition Assistant → Settings to match your toolchain (the compiler has to be on PATH; the Check environment (doctor) command reports anything that is missing). -O2 matters: without optimisation a local run is orders of magnitude slower than the judge, so a correct program gets reported as TLE.

Key bindings: the bindings live in this package's own Default (<platform>).sublime-keymap, so they load with the package and are released again when you disable or uninstall it — nothing is ever written into your personal keymap. Set "enable_keybindings": false to release the keys without editing any keymap. Example (Windows|Linux|OSX).sublime-keymap holds the same entries as a copy-paste reference if you want to change one.

Context menu: entries only appear for the file types listed in run_settings; set "context_menu": false to hide them completely. Nothing is added to other menus.


相比原版 FastOlympicCoding,多了什么

能力 FastOlympicCoding 本插件
彩色 verdict 徽章(AC/WA/TLE/MLE/RE/PE/CE…) ❌ 只有纯文本 ✅ 类 cph-ng 的徽章样式
真实内存判定(MLE) ❌ 内存是死配置 ✅ 跨平台采样进程峰值内存,超限真判 MLE
超时硬杀(TLE) ❌ 死循环杀不掉 ✅ 看门狗到点终止整个进程树
运行错误定位(RE 位置) ❌ ✅ 从程序输出解析 文件:行号(Python 回溯 / Java 栈 / sanitizer 诊断),解析不到就用 gdb 回放崩溃现场
详情视图 + 逐行 diff ❌ ✅ 独立标签页,可选中可复制
编译缓存 ❌ 每次都重编 ✅ 源文件/命令未变则跳过编译
只重跑失败 / 跑完全部 / 强制重编 ❌ ✅ 三个命令 + 快捷键
浮点容差(float_tolerance) ❌ ✅ 浮点题不再因 0.1+0.2 != 0.3 误判
输出体积上限(防卡死) ❌ ✅ max_output_bytes
多文件编译(extra_sources / include_dirs) ❌ ✅
环境自检 doctor ❌ ✅ 一条命令排查 + 可粘贴的 Markdown 报告
纯键盘操作(选测试点→操作) ❌ ✅ Ctrl+Alt+M
对拍反例自动入库 ❌ ✅
Competitive Companion 持久监听 ⚠️ 需 Hook ✅ 内建、可反复点击
中英文双语界面 ❌ ✅
测试面板自适应宽度 ❌ ✅ 卡片放不下时自动加宽

工程上还有:Python 3.3 兼容(Sublime 插件宿主)、四平台 CI(Linux 3.8/3.12 + Windows + macOS)、551 项回归测试。


主要功能

1. 类 cph-ng 的测评结果显示

每个测试点显示:

C++ 想拿到 RE 行号? 普通的段错误本身不带行号。用 Ctrl+Alt+G 切到 Debug 模式再跑一次:Debug 会加上 -g -fsanitize=undefined -fsanitize-trap=undefined -D_GLIBCXX_ASSERTIONS,有符号溢出、栈数组越界、除零 会直接变成非零退出码(判 RE),std::vector 越界由断言宏给出 stl_vector.h:1263。 若程序是裸段错误、输出里没有行号,插件会自动用 gdb 回放崩溃现场 (bt + info locals)找出你自己的那一帧,行号照样可以点着跳过去。 只有崩溃发生在 Debug 也没覆盖到的地方(例如堆越界)才需要手动把 -fsanitize=address 写进 compile_cmd——注意本机 MSYS2 mingw 没有 libasan/libubsan,写进去会链接失败。

2. 详情视图(detail)+ 逐行 diff

点击 详情 打开一个真实的编辑器标签页(xxx - test N detail),文字可选中、可复制:

运行结束后再次点击 详情 会自动刷新。

3. 正确/错误答案快捷标记

运行结束后输出下方出现 accept / decline:accept 把当前输出记为正确答案,decline 记为错误答案。

4. 集成 Competitive Companion 浏览器插件

  1. 在 Sublime Text 中打开要做题的代码文件
  2. 右键选择 Algorithm Competition Assistant: Listen to Competitive Companion
  3. 浏览器打开题目页,点 Competitive Companion 扩展的绿色 +
  4. 样例与时间/内存限制自动发送到 Sublime Text、存进测试文件并自动运行

监听器是持久的(cph-ng 风格):启动一次后可反复点击发送不同题目,不会端口冲突或报 "Can't restore session";在另一个文件上再次执行该命令 = 切换监听目标;Stop Competitive Companion listener 随时停止。

注意:需要在 Competitive Companion 扩展的端口列表里加入 12345(可用设置项 companion_port 修改)。

5. 国际化 (i18n)

默认中文,可切换:

6. 运行模式与效率

7. 测试面板自适应宽度

右侧运行面板默认只占窗口 32%;卡片按钮放不下时,插件会在每次刷新后自动加宽,直到最宽的卡片能一行放下:

{
	"auto_fit_panel_width": true,
	"max_panel_width_ratio": 0.5
}

安装

  1. 克隆或下载本仓库
  2. 把仓库文件夹复制到 Sublime Text 的 Packages 目录(显示名为 Algorithm Competition Assistant, 安装目录名沿用仓库名 cph-by-chenkx 即可,功能与数据文件名都不变)
  3. 重启 Sublime Text

使用方法

  1. 打开 C++ 源文件
  2. 按 Ctrl+Alt+B(Mac:Cmd+Alt+B)启动测评
  3. 右侧打开测试运行窗口,可输入/编辑测试数据
  4. 测评结束后每个测试点显示 verdict 徽章
  5. 点 详情 看带逐行 diff 的详情页;点 编辑 打开输入(test N -edit)与标准答案(test N -answer)两个标签页,在答案页填好预期输出后 save 即可自动重新评判

关于默认运行命令:默认 run_cmd 用正斜杠路径,Windows / Linux / macOS 通用。想换成自己的写法,把 run_settings 复制到 User 设置里覆盖即可。

已知限制

快捷键

绑定随插件包一起加载(Default (<你的平台>).sublime-keymap),不会写进你自己的 keymap。 所以禁用或卸载本插件时,这些按键会自动还给其它插件,不会留下"占着键位却没人响应"的死绑定。

  • 想临时让出键位:设置 "enable_keybindings": false,不用改任何 keymap。
  • 想改某一个键:在 Preferences → Key Bindings 里覆盖同一条即可 (Example (<你的平台>).sublime-keymap 里有同样的条目可以直接抄)。

下表里的按键就是随包默认生效的绑定(macOS 上 Ctrl+Alt 对应 Cmd+Alt)。 面板内的 Enter / Ctrl+V / Ctrl+D … 只在本插件的测试编辑/详情视图里生效。

按键 功能
Ctrl+Alt+B (Mac: Cmd+Alt+B) 运行测试
Ctrl+Alt+I (Mac: Cmd+Alt+I) 从文件导入测试
Ctrl+Alt+S (Mac: Cmd+Alt+S) 开始对拍(对拍输出页上也按它 = 重新跑该文件的这场对拍)
Ctrl+Alt+Shift+S (Mac: Cmd+Alt+Shift+S) 停止对拍,只在对拍输出页生效;多个文件同时对拍时停的是当前页这一场
Ctrl+Alt+L / Ctrl+Alt+Shift+L (Mac: Cmd+Alt+L / Cmd+Alt+Shift+L) 开启 / 停止 Competitive Companion 监听
Ctrl+Alt+P 或 Ctrl+K, Ctrl+P (Mac: Cmd+Alt+P 或 Cmd+K, Cmd+P) 收缩 / 恢复右侧测试面板
Ctrl+Alt+T (Mac: Cmd+Alt+T) 展开模板片段(光标停在关键字后,如 fastio)
Ctrl+Alt+V (Mac: Cmd+Alt+V) 用剪贴板内容新增测试点(输入 --- 输出 可同时带答案)
Ctrl+Alt+C / Ctrl+Alt+Shift+C 复制当前测试的 预期输出 / 实际输出
Ctrl+Alt+E (Mac: Cmd+Alt+E) 把全部测试导出成 1.in / 1.out 文件对
Ctrl+Alt+R (Mac: Cmd+Alt+R) 只重跑失败的测试点(已 AC 的自动跳过)
Ctrl+Alt+Shift+B 跑完全部测试点(不因失败中断)
Ctrl+Alt+Shift+P 并行跑完全部测试点(多进程,TLE 多时总时长约 1/4)
Ctrl+Alt+Shift+F 从题目 URL 抓题:样例变测试点(可同时打开题面)
Ctrl+Alt+Shift+V 把题目题面转成 Markdown 打开
Ctrl+Alt+Shift+K Benchmark 当前测试点(跑 N 次报最快/平均/最慢)
Ctrl+Alt+Shift+T 比赛计时器(状态栏倒计时,可停止)
Ctrl+Alt+Shift+R 强制重新编译后运行(忽略编译缓存)
Ctrl+Alt+G (Mac: Cmd+Alt+G) 切换 Debug / Release 编译模式(状态栏显示当前模式)
Ctrl+Alt+D (Mac: Cmd+Alt+D) 环境自检(编译器 / 端口 / 路径 / 资源)
Ctrl+Alt+M (Mac: Cmd+Alt+M) 键盘选择测试点并运行 / 详情 / 编辑(不用鼠标)
Enter (在 TestSyntax 中) 插入行
Ctrl+Enter (在 TestSyntax 中) 新建测试
Ctrl+V / Cmd+V (在 TestSyntax 中) 粘贴
Ctrl+X / Cmd+X (在 TestSyntax 中) 终止进程
Ctrl+D / Cmd+D (在 TestSyntax 中) 删除测试
Ctrl+Shift+Up/Down (在 TestSyntax 中) 交换测试顺序

对拍 (Stress Test) 教程

对拍 = 用随机数据生成器不停测试你的程序和标准程序 (std),一旦输出不一致就停下,把出错的输入和两边输出展示给你。适合排查 WA 的边界情况。

1. 准备三个文件(放在同一目录)

gen.cpp 示例(随机生成两个 1~10 的数):

#include <bits/stdc++.h>
using namespace std;
int main() {
    srand(time(0) + rand());
    int a = rand() % 10 + 1, b = rand() % 10 + 1;
    printf("%d %d\n", a, b);
    return 0;
}

2. 启动对拍

在你的程序的编辑视图里任选一种:

不需要填路径:命令会先在当前源文件所在目录里按名字找 std 和生成器 (std / brute / bf / sol / 暴力 与 gen / data / maker / rand / 生成 等), 找到就直接开跑,轮数与时间限制用设置里的 stress_max_rounds / stress_time_limit_seconds。 目录里有多个候选时会列出来让你选一个;一个都找不到时才会请你挑文件 —— Windows 上直接弹 系统「打开文件」对话框,起始目录就是当前源文件所在目录,其它平台用命令面板浏览 (stress_file_picker 可改成 native / panel)。

想每次都自己指定,用命令面板里的 Algorithm Competition Assistant: Stress test with options (pick files, rounds), 它会依次问 std、生成器、每轮时限和最大轮数。

3. 查看结果

会打开 xxx -stress 输出窗口:

4. 注意事项

致谢

本插件基于以下开源项目:

设置示例

在 Algorithm Competition Assistant.sublime-settings(旧名 cph-by-chenkx.sublime-settings,Preferences > Package Settings > Algorithm Competition Assistant)中:

{
	"language": "zh",
	"run_settings": [
		{
			"name": "C++",
			"extensions": ["cpp"],
			"compile_cmd": "g++ \"{source_file}\" -std=c++11 -o \"{file_name}\"",
			"run_cmd": "\"{source_file_dir}\\{file_name}.exe\" {args} -debug",
			"time_limit_ms": 2000,
			"memory_limit_mb": 256
		}
	],
	"tests_relative_dir": ""
}

想要 C++ 崩溃时给出行号,把 compile_cmd 改成: g++ "{source_file}" -std=c++11 -g -fsanitize=undefined -fsanitize-trap=undefined -fno-omit-frame-pointer -o "{file_name}" (-fsanitize-trap=undefined 不需要 sanitizer 运行库,所以 MSYS2 mingw 这类不带 libubsan 的工具链也能用;换成 -fsanitize=address 需要 libasan,缺库时插件会 自动去掉 -fsanitize 重试一次并提示。也可以干脆用 Ctrl+Alt+G 切到 debug 模式, 由插件帮你加这组参数。)

Results

Packages