diff --git a/apps/web/src/admin/api.ts b/apps/web/src/admin/api.ts index 96556ea..43b00cc 100644 --- a/apps/web/src/admin/api.ts +++ b/apps/web/src/admin/api.ts @@ -1,6 +1,7 @@ import { toAdminType, toProblemPermission } from "@oj2/contract" import type { AddContestProblemRequest, + ChallengeSuggestionsResponse, AddProblemsToSetRequest, BatchProblemTagRequest, BatchProblemVisibleRequest, @@ -353,6 +354,16 @@ export function checkAstRules(data: AstCheckRequest) { return api.post("admin/ast-check", data satisfies AstCheckRequest) } +// 出题页「挑战」的候选:拿这道题历史上做对的代码挖 +export function getChallengeSuggestions(problemId: number, language: string) { + return api.post( + `admin/problems/${problemId}/challenge-suggestions`, + { + language, + }, + ) +} + // AI 按题面和标准答案想几组测试输入(输出由标准答案跑) export function generateTestInputs(data: GenerateTestInputsRequest) { return api.post( diff --git a/apps/web/src/admin/problem/components/AstRulesEditor.vue b/apps/web/src/admin/problem/components/AstRulesEditor.vue index 54fa8ea..e6ca136 100644 --- a/apps/web/src/admin/problem/components/AstRulesEditor.vue +++ b/apps/web/src/admin/problem/components/AstRulesEditor.vue @@ -15,6 +15,11 @@ interface Props { languages: LANGUAGE[] /** 各语言的标准答案(学生那段代码,不套模板):拿来自测规则 */ answers: Partial> + /** + * 挑战的判定规则(ChallengeEditor 里一条挑战一个)。和语法要求是同一套规则,但口径不同: + * 不满足不算错、说法由挑战自己写、标准答案不这么写是常事(挑战就是另一种写法) + */ + challenge?: boolean } const props = defineProps() @@ -294,8 +299,13 @@ watch(supportedLanguages, (langs) => {