feat(judging): persist immutable per-language problem configurations

This commit is contained in:
2026-10-09 14:53:09 +08:00
parent a5a7e40308
commit 4b8f255180
58 changed files with 2169 additions and 163 deletions
+45 -10
View File
@@ -254,7 +254,7 @@ export interface components {
* Format: uuid
*/
idempotency_key: string;
language: components["schemas"]["Language"];
language: components["schemas"]["Language-Input"];
/**
* Problem Version Id
* Format: uuid
@@ -320,7 +320,7 @@ export interface components {
* @constant
*/
kind: "judge.manifest";
language: components["schemas"]["Language"];
language: components["schemas"]["kf_oj__contracts__judging__Language"];
/**
* Problem Version Id
* Format: uuid
@@ -344,7 +344,7 @@ export interface components {
* Language
* @enum {string}
*/
Language: "c17" | "cpp20";
"Language-Input": "c17" | "cpp20" | "python313" | "java21";
/** LoginRequest */
LoginRequest: {
/**
@@ -366,6 +366,11 @@ export interface components {
expires_at: string;
user: components["schemas"]["CurrentUser"];
};
/**
* PreparationKind
* @enum {string}
*/
PreparationKind: "compile" | "syntax_check";
/** ProblemDetail */
ProblemDetail: {
/**
@@ -373,11 +378,16 @@ export interface components {
* Format: uuid
*/
id: string;
/**
* Language Configurations
* @default []
*/
language_configurations: components["schemas"]["PublicLanguageConfiguration"][];
/** Languages */
languages: components["schemas"]["Language"][];
languages: components["schemas"]["kf_oj__contracts__judging_v2__Language"][];
/** Revision */
revision: number;
run_limits: components["schemas"]["RunLimits"];
run_limits: components["schemas"]["RunLimits"] | null;
/** Samples */
samples: components["schemas"]["PublicSample"][];
/** Slug */
@@ -407,7 +417,7 @@ export interface components {
*/
id: string;
/** Languages */
languages: components["schemas"]["Language"][];
languages: components["schemas"]["kf_oj__contracts__judging_v2__Language"][];
/** Revision */
revision: number;
/** Slug */
@@ -446,6 +456,21 @@ export interface components {
/** Memory Peak Bytes */
memory_peak_bytes: number | null;
};
/** PublicLanguageConfiguration */
PublicLanguageConfiguration: {
compile_limits: components["schemas"]["RunLimits"];
/** Entrypoint */
entrypoint: string;
/** Job Wall Time Us */
job_wall_time_us: number;
language: components["schemas"]["kf_oj__contracts__judging_v2__Language"];
preparation_kind: components["schemas"]["PreparationKind"];
run_limits: components["schemas"]["RunLimits"];
/** Runtime Version */
runtime_version: string;
/** Source Name */
source_name: string;
};
/** PublicSample */
PublicSample: {
/**
@@ -494,7 +519,7 @@ export interface components {
* Format: uuid
*/
evaluation_id: string;
language: components["schemas"]["Language"];
language: components["schemas"]["kf_oj__contracts__judging_v2__Language"];
/**
* Problem Version Id
* Format: uuid
@@ -526,7 +551,7 @@ export interface components {
*/
evaluation_id: string;
failure_code: components["schemas"]["FailureCode"] | null;
language: components["schemas"]["Language"];
language: components["schemas"]["kf_oj__contracts__judging_v2__Language"];
/**
* Problem Version Id
* Format: uuid
@@ -559,7 +584,7 @@ export interface components {
};
/** SubmissionSource */
SubmissionSource: {
language: components["schemas"]["Language"];
language: components["schemas"]["kf_oj__contracts__judging_v2__Language"];
/** Source */
source: string;
/**
@@ -583,7 +608,7 @@ export interface components {
*/
evaluation_id: string;
failure_code: components["schemas"]["FailureCode"] | null;
language: components["schemas"]["Language"];
language: components["schemas"]["kf_oj__contracts__judging_v2__Language"];
/**
* Problem Version Id
* Format: uuid
@@ -646,6 +671,16 @@ export interface components {
* @enum {string}
*/
Verdict: "accepted" | "wrong_answer" | "compilation_error" | "runtime_error" | "time_limit_exceeded" | "memory_limit_exceeded" | "output_limit_exceeded" | "cancelled" | "system_error";
/**
* Language
* @enum {string}
*/
kf_oj__contracts__judging__Language: "c17" | "cpp20";
/**
* Language
* @enum {string}
*/
kf_oj__contracts__judging_v2__Language: "c17" | "cpp20" | "python313" | "java21";
};
responses: never;
parameters: never;
+9 -3
View File
@@ -37,6 +37,11 @@ const wireLanguage = computed(() =>
const supported = computed(
() => wireLanguage.value !== null && !!problem.value?.languages.includes(wireLanguage.value),
)
const runLimits = computed(
() =>
problem.value?.language_configurations?.find((c) => c.language === wireLanguage.value)
?.run_limits ?? problem.value?.run_limits,
)
const draftText = computed(
() =>
({
@@ -182,9 +187,10 @@ onBeforeUnmount(() => {
</div>
</div>
<div class="problem-limits">
<span>CPU 限制:{{ problem.run_limits.cpu_time_us / 1000 }} ms</span
><span>墙钟限制:{{ problem.run_limits.wall_time_us / 1000 }} ms</span
><span>内存限制:{{ problem.run_limits.memory_bytes / 1048576 }} MiB</span
<span>CPU 限制:{{ runLimits ? runLimits.cpu_time_us / 1000 + ' ms' : '未提供' }}</span
><span>墙钟限制:{{ runLimits ? runLimits.wall_time_us / 1000 + ' ms' : '未提供' }}</span
><span
>内存限制:{{ runLimits ? runLimits.memory_bytes / 1048576 + ' MiB' : '未提供' }}</span
><span>精确字节比较</span>
</div>
<div class="detail-prose">