Skip to content

任务与结果的数据类型

MuYu edited this page Jan 30, 2020 · 2 revisions

数据在 redis 中均为 json string。

类定定义

interface JudgeJob {
  version: 1
  solutionId: number
  code: string
  lang: string
  // 指明 problem 的 meta 从哪里拉取
  problem: {
    type: 'redis'
    key: string
  }
}

interface Result {
  version: 1
  solutionId: number
  result: ResultType
  // 除非配置 否则取机器的 hostname
  hostname: string
  detail: {
    point: string
    result: ResultType
    timeCost: number
    memoryUsage: number
  }[]
}

interface ProblemMeta {
  // 编译与判题的镜像指定
  langConfig: {
    [lang in CodeLang]: LangConfig
  }
  testCase: TestCaseFromS3 | TestCaseFromFS
}

type CodeLang = 'C' | 'C++'

interface LangConfig {
  image?: {
    compiler?: ImageConfig
    judger?: ImageConfig
  }
  limit: {
    timeCost: number
    memoryUsage: number
  }
}

interface ImageConfig {
  name: string
  cmd?: string[]
  entrypoint?: string[]
}

interface TestCaseFromS3 {
  type: 's3'
  list: {
    // 没有就用文件名
    name?: string,
    key: string
    // 最新版本 hash 不同应更新缓存
    // 不指明时 用 s3 api 拉取
    etag?: string
    // 分数
    score?: number
  }[]
}

interface TestCaseFromFS {
  type: 'file'
  list: {
    // 没有就用文件名
    name?: string,
    // 本地路径
    key: string
    // 分数
    score?: number
  }[]
}

enum ResultType {
  AC = 'AC',
  WA = 'WA',
  RE = 'RE',
  CE = 'CE',
}
Clone this wiki locally