ContestSonic 开发笔记(四)

首先谢罪,因为自从写完(三)之后真的这个就一点也没动过。然后结题论文胡写一通,PPT 测评系统实锤,简直是瞎搞。

最大的工作可能是给题目和赛制建模,但是这个谁都知道咋建……

下面就是最终的(阶段性)成果了……(虽然人尽皆知吧……)

题目类型分类如下:

  • 传统型:这个是最基本的输入-输出型,也是最普遍使用的;
  • 提交答案型:相比于传统型,省略了代码部分,直接根据输入提交答案即可;
  • 交互题:分为函数交互和 IO 交互两部分,主要任务是实现接口,并最小化查询次数;
  • 通信题:写两个程序,一个程序处理输入并发送信息给第二个程序,要求通信字节数尽量少,第二个程序实现题目要求功能,两个程序可以互相通信。

赛制如下:

  • 赛中无反馈型:根本无反馈,并没有罚时机制;
  • 赛中有反馈无罚时型(IOI 型);
  • 赛中有反馈有罚时型(ICPC 型)。

评分规则的话,平均评分可以看成一种特殊的子任务,即分成测试点数目的子任务,每个子任务得分即为总分除以测试点个数。

因为线下比赛采用 CF 赛制的比较少,因此并不考虑(实际上考虑的是可编程题目类型和赛制类型)。

就这样其实统一一下测评 API 看似就完事了……

考虑测评一个测试点,其实大致都是一样的……但对输入输出的控制实现不同。传统题,利用函数交互的交互题和通信题直接重定向输入输出即可,但是 IO 交互的交互题和通信题需要用管道把选手程序和交互库连接起来。提交答案型直接扔到判断过程即可,省略程序运行过程。实现时直接跳过即可。或者为了实现节拍对齐,需要打是否已经测评标记的话,实现全打好即可。

这样对于一个子任务,就是对于多个测试点测评信息的整合,测评一道题就是对多个子任务测评的整合。比如子任务依赖等等需求都在这里加代码。测评比赛就是支持多道题这样……

这样其实很容易通过一些接口实现扩展(最近 Java 上头了……),包括赛制的支持,也可以通过一些参数的配置实现。

一些测评技术,比如 cgroup,JudgeDuckOS,测评端异步交互,测评任务均衡什么的别人比我清楚得多……

可编程题目类型和赛制类型其实就是接口实现,别人会得比我多……

最后这玩意不会实现……我放弃了……

创新创业项目倒是就此截止了,但是闲得没事的时候可能会写写后端什么的。但是更可能写的是爬虫把 Lutece 爬了……或者研究 Lutece 咋写的……

反正最后大概率咕咕咕……wdnmdacm……

以上。