feat(题目): 「运行例子」「自己输入」改用和提交同一台判题机——例子上跑出什么样,提交在这几个例子上就是什么样
Deploy / deploy (push) Canceled after 0s

原来试运行走另一台 Judge0:C 是 GCC 9、编译参数也不一样,Python 的语法错误回来的是运行错误,
没有题目的时间内存限制和代码模板,例子上的结果常和提交对不上。现在走本站判题机
(POST /trial-runs),同一套编译命令、这道题的限制和模板,对不对也由判题机比。

- 不落库、不算提交、不进判题队列:api 进程里自己排队,全站同时 TRIAL_CONCURRENCY 批
  (服务器 2、机房 4),每人最多两批,排满或等超过 30 秒就请学生过一会儿再点
- 死循环不停打印时判题机回包会很大,超过 16MB 就掐断,告诉学生输出太多、停不下来
- Python 语法错误用和提交一样的说明:第几行、中文标点标红、一键换成英文
- 运行时错误和提交用同一个解析,说清楚第几行、为什么(下标越界、int() 转换失败、段错误……);
  比赛里照旧只给按结果码的那一句
- 语法没过、服务没跑成时,标题不再说「N 个例子没对上」
- 后台「生成测试点」一并迁过来,编译警告不会再写进 .out;Judge0 的地址和调用全部删掉

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-09-29 08:09:44 +08:00
1 parent 8834536135
commit eb32676de4
27 files changed
+691 -169

No files matched your search

@@ -63,7 +63,10 @@
1. **AC 后点评保持强制弹窗**,七个选项不变(「题目有错」和其他六项放在一起,不单独挪走)。
2. **题单入口隐藏**「我的提交」「本题提交」「统计」「点评」和标题下的「已解决 / 尝试过」标签 ——
不让学生看到加入题单之前的提交、抄到答案。
3. **「运行例子」先继续用 Judge0**,不另做判题机端点。
3. ~~「运行例子」先继续用 Judge0,不另做判题机端点。~~ **2026-09-29 改了**:「运行例子」「自己输入」、
后台「生成测试点」都改走本站判题机(`POST /trial-runs`,`apps/api/src/judge/trial.ts`),
和提交同一套编译命令、这道题的时间内存限制和代码模板;试运行在 api 进程里自己排队,
不进判题队列,全站同时跑的批数由 `TRIAL_CONCURRENCY` 定,每人最多两批。
4. **流程图题可以放进题单**;题单里流程图拿到 **A 或 S 级算这道题完成**。
5. 题单里**答案正确或流程图 A/S 后,1.5 秒自动回题单**,保留。
6. **课堂条里,流程图 A/S 也算做完。**
@@ -198,7 +201,7 @@ B 看得到。
| 管理员 | —— | 测试点表格原样(只有管理员有数据) |
**运行例子的判定**:两边都去掉末尾空白再比(现在只 trim 了运行输出,末尾带空格的样例永远「不通过」,
`ProblemContent.vue` 的 `test()`)。Judge0 返回的英文报错(Traceback、gcc 报错)**不能直接给学生看**:
`ProblemContent.vue` 的 `test()`)。判题机返回的英文报错(Traceback、gcc 报错)**不能直接给学生看**:
显示「程序运行出错了 / 编译没通过」加中文说明,原文折叠。
**「其他」类差异的文案要改**:现在是「对照一下你的输出和正确输出,找找从哪里开始不一样」,
@@ -243,7 +246,7 @@ B 看得到。
| 相似题 | ✓ | ✗(点进去会离开题单) | ✗ |
| 老师协作 | ✓ | ✓ | ✗(房间只记题号,比赛题号 1、2、3 和公开题撞号) |
| 课堂统计(教师) | ✓ | ✓ | ✗(统计接口按题号在公开题库里找题) |
| SQL 题 | 隐藏「运行例子」「自己输入」(Judge0 跑不了 SQL);数据表可横向滚动 | 同左 | 同左 |
| SQL 题 | 隐藏「运行例子」「自己输入」(SQL 不走判题机);数据表可横向滚动 | 同左 | 同左 |
一道题既在这节课里、又是从题单进来的:按入口路由,显示题单条。
@@ -321,8 +324,7 @@ B 看得到。
## 13. 不做 / 保持现状
- 「运行例子」不换成自己的判题机(决定 3)。代价:Judge0 的 C 是 GCC 9,参数也和判题机
(gcc-14 + `cLooseErrors`)不同,例子上的结果偶尔会和提交不一致。
- ~~「运行例子」不换成自己的判题机(决定 3)。~~ 已换,见决定 3。
- 强制点评的七个选项不改(决定 1)。
- 答案错误说明里给出的写法提示(如「Python 可以写 f"{x:.2f}"」)保持现状。
- AST 未通过按已解决记账、不放烟花 —— 和后端 `NON_FAILURE_RESULTS` 一致,保持。