Becoder Companion
在 VS Code 里刷 Becoder(必可) 的题:题面/样例一键抓取 → 本地评测 → 一键提交 → 评测跟踪。
同时适配两个站点:
| 站点 |
地址 |
| 公网 |
https://www.becoder.com.cn |
| 内网 |
http://222.180.160.110:61235 |
快速开始
- 安装本扩展(
.vsix)。
- 打开左侧活动栏的 Becoder 图标。
- 运行命令 Becoder: 用浏览器 Cookie 登录,粘贴浏览器里的
connect.sid。
- 浏览器打开并登录站点 →
F12 → Application → Cookies → 复制 connect.sid 的 Value
- 也可以整行复制请求头里的
Cookie,扩展会自动提取
- Becoder: 载入题目,输入题号(
32424)、题目链接,或比赛题号(7894/A)。
- 写代码,按
Ctrl+Alt+B 运行全部样例,Ctrl+Alt+S 提交。
功能一览
- 题库搜索:关键词(实测「线段树」609 条)、标签、翻页,选中即载入
- 题面并排显示:公式用 KaTeX 排版,断网退化为 Unicode
- 本地评测:多语言、真实超时、TLE/RE/WA/CE 判定、WA 定位到行、文件 IO
- 一键提交 + 评测跟踪:逐测试点详情
- 题解 / 讨论:单题题解 + 整场比赛题解/讲义;内嵌 PDF 直接在面板里看,附带评论
- 用例编辑:面板式编辑(输入/期望输出两个框,Ctrl+S 保存、Ctrl+Enter 保存并运行),站点样例也能改
- 手动导入:粘贴题面与样例,交互题也能做题
- 双站点:公网 / 内网一键切换
- 零 npm 依赖
这一版修好了什么
旧版本“体验不好”,根因是它在拿不到数据时会编造数据:
- 编造题目标题(
比赛 #1 题目 #1)
- 编造样例(永远是
1 2 → 3)
- 编造题解文章和讨论列表
- 题面公式被
replace(/<[^>]+>/g,'') 全部丢掉,只剩“和”这种残句
- 登录接口猜来猜去(
/api/login + MD5),而真实接口是 /api/judge-login + JWT
v2.0 全部按实测过的真实接口重写:
| 能力 |
实现 |
| 题面 / 样例 |
GET /api/front-v2/problems/:id(支持 contest_id / contest_problem) |
| 比赛题目列表 |
GET /api/front-v2/contests/:id |
| 网页提交 |
POST /problem/:id/submit?front_v2=1(multipart,字段与站内表单一致) |
| 评测记录 |
GET /api/front-v2/submissions/:id |
| JWT 登录 |
POST /api/judge-login(accessToken 1h / refreshToken 7d,自动刷新) |
| 判题 |
POST /api/judge/problem、GET /api/judge/result、GET /api/judge/result_polling |
| 计费点 |
GET /api/credit |
| CSRF |
cookie csrf_token → 请求头 X-CSRF-Token |
其它实质性改进:
- 公式可读:站点把 Markdown 渲染成了 MathJax SVG,但保留了
data-mml-node 结构与
MathJax 字符码。扩展据此重建 LaTeX(10^6、\frac{a}{b}、\sqrt{x}、\sum_{i=1}^{n}),
题面面板优先用 KaTeX 排版;断网时自动退化为 Unicode(10⁶、(a)/(b)、√x)。
- 不再覆盖你的登录态:站点对匿名请求也会下发新的匿名
connect.sid,
旧逻辑会把用户刚粘贴的会话覆盖掉。现在只有 csrf_token 会被吸收。
- 样例解析按站点真实格式(
#### 样例输入 + 代码块)解析,支持多组样例。
- 本地评测:C++/C/Java/Rust/Pascal 编译型语言编译一次后逐用例运行,
Python/Node 直接运行;真实超时(题目时限 × 1.5,可配)、
TLE/RE/WA/CE 判定、WA 定位到具体行;支持题目要求的文件 IO。
- 输出比对兼容行末空格、结尾空行、CRLF,并能从 JSON 包装的脏输出里提取答案。
- 提交后可直接跟踪评测状态(Waiting → Accepted/Wrong Answer…)。
- 100% 零依赖:扩展不带任何 npm 依赖,安装体积小、启动快。
命令一览
| 命令 |
快捷键 |
说明 |
| Becoder: 搜索题库 / 浏览题目 |
|
关键词搜索、791 个标签筛选、翻页(36642 道题) |
| Becoder: 载入题目 |
Ctrl+Alt+P |
题号 / 链接 / 比赛题号 |
| Becoder: 查看题目题解与讨论 |
|
插件内阅读题解正文(支持内嵌 PDF 讲义与评论) |
| Becoder: 查看整场比赛的题解 / 讲义 |
|
输入比赛编号,对应 discussions?type=contests&contest_id=XXXX |
| Becoder: 手动导入题目与样例 |
|
粘贴题面与样例,覆盖交互题 / 站点缺数据 |
| Becoder: 载入比赛 |
|
列出比赛题目后选择 |
| Becoder: 在侧边显示题面 |
|
编辑器右侧并排 |
| Becoder: 运行全部测试用例 |
Ctrl+Alt+B |
本地评测 |
| Becoder: 提交代码到 Becoder |
Ctrl+Alt+S |
网页登录态提交 |
| Becoder: 查看 / 刷新评测结果 |
|
跟踪评测 |
| Becoder: 用浏览器 Cookie 登录 |
|
推荐方式 |
| Becoder: 用账号密码登录评测接口 |
|
换 JWT,用于判题接口 |
| Becoder: 检查登录状态与计费点 |
|
|
| Becoder: 切换服务器地址 |
|
公网 / 内网 |
| Becoder: 新建代码文件并绑定题目 |
|
|
| Becoder: 从代码注释自动识别题目 |
|
// Becoder 题目 #1234 |
| Becoder: 导出测试用例为 .in/.ans |
|
|
设置项
| 设置 |
默认 |
说明 |
becoder.serverUrl |
https://www.becoder.com.cn |
站点地址 |
becoder.defaultLanguage |
空 |
提交语言,留空则每次按站点语言列表选择 |
becoder.defaultFileExtension |
cpp |
新建解题文件后缀 |
becoder.autoMountSideBySide |
true |
载入后自动并排显示题面 |
becoder.timeoutFactor |
1.5 |
超时 = 题目时限 × 系数 |
becoder.minTimeoutMs |
1000 |
最小超时 |
becoder.trimTrailingWhitespace |
true |
忽略行末空白 |
becoder.ignoreCase |
false |
忽略大小写 |
becoder.compileCommands / becoder.runCommands |
{} |
按语言覆盖命令 |
关于两种登录
站点有两套独立认证,扩展严格区分:
- 网页登录态(Cookie
connect.sid) — 取题面、样例、提交、看评测记录。
从浏览器复制,长期有效,是主要方式。
- 评测机 JWT —
/api/judge/* 判题接口与计费点查询。
用 Becoder: 用账号密码登录评测接口 获取,accessToken 过期会自动用 refreshToken 续期。
只需要刷题 + 提交的话,第 1 种就够了。
已知限制
- 交互题、答案提交题没有标准输入输出样例,扩展会如实提示,可自行添加用例(用例编辑器)。
- 题解若是内嵌 PDF,面板里用的是站点的 PDF 阅读器,需要能访问站点静态资源。
- 站点对
problemId 相同但比赛不同的题目会返回不同内容,扩展按 contest_id /
contest_problem 精确请求,不会混淆。
- 本地评测的时限是本机时限,与评测机性能不同,仅供参考。
| |