




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一种脚本化在线评测系统的实现中山纪念中学唐适之The_Roast_DuckYAUJ = YET ANOTHER UNIVERSAL JUDGE本项目是基于中山纪中原有的Fortuna OJ部分重构的,重写了大部分后台和小部分前端,目前仍处于测试阶段。在此感谢原作者moreD学长的前期工作。Fortuna OJ项目源码可以在https:/ = YET ANOTHER UNIVERSAL JUDGEYAUJ是受VFK的UOJ启发编写的,感谢VFK同学提供了一个封装得非常好的sandbox。我用它替代了我一开始使用的libsandbox作为评测核心。YAUJ = YET ANOTHER UNIVER
2、SAL JUDGEYAUJ是我的一个尝试。解决了一些问题但是也有自己的一些缺点什么是脚本化这里的脚本化是指,让OJ支持使用脚本定制试题,以支持更灵活的题目类型。为什么是脚本化为什么不直接使用SPJ?为什么是脚本化OJ并不是一个简单的测试器,需要与选手进行大量的操作。最简单的,也需要让选手知道每个点的时间、空间限制是多少(或没有?),也需要显示每个测试点的详细结果(时间、空间、状态、信息?)实现对不同类型试题的通用处理,不仅要定义如何评测评测,也要影响网页前端网页前端的行为。使用脚本以避免繁杂的表单繁杂的表单。为什么是脚本化用UOJ上已经举过的一个例子:提交两个程序,一个压缩一个解压?那时空消耗
3、怎么显示?为什么是脚本化用UOJ上已经举过的一个例子:提交两个程序,一个压缩一个解压?那时空消耗怎么显示?或者说提交答案题需要提供数据下载。网页前端怎样知道有那些文件可以允许下载?为什么是脚本化用UOJ上已经举过的一个例子:提交两个程序,一个压缩一个解压?那时空消耗怎么显示?或者说提交答案题需要提供数据下载。网页前端怎样知道有那些文件可以允许下载?稍微复杂一点但也很常见的另一种情况?USACO上有一些题要求选手程序读入一个在所有测试点都不变的、可供选手下载的一个字典。怎样体现?一.实现脚本用什么实现脚本?找一个现成的脚本语言?Lua听起来不错。语法简单,并且有将其解释器嵌入在C中的库。Java
4、Script?现在它已经不仅仅能在浏览器上运行了,这样可以用Js在后端评测而在前端预处理以节约编译时间。一.实现脚本用什么实现脚本?可惜这些优点是我后来才想到的一.实现脚本用什么实现脚本?我自己实现了一个(解释器?编译器?)嗯,翻译器。一.实现脚本用什么实现脚本?我自己实现了一个(解释器?编译器?)嗯,翻译器。将脚本翻译成C+,编译后执行。一.实现脚本这是重复造轮子吗?这样实现还是有一点好处的一.实现脚本1. 编译语言执行效率更高。后来的调试证明,这种脚本也是有效率要求的。2. 不用专门禁用一些可能危及系统安全的函数,也便于添加新的函数3. 语法更贴近OIer习惯这是一种脚本化的C+语法,支持
5、动态类型、内建list和dict。一.实现脚本如何实现?一.实现脚本1. Bison + Flex。Bison是一个语义分析器,Flex是一个词法分析器,协同使用。通过指定语法规则,它们内部通过建立自动机最终输出一段代码的语法树。(可以通过这种方法实现一个作弊检测工具吗?一.实现脚本2. 实现动态类型解释器。二.与网页交互:文件授权这是一种意在简化与网页交互的模型。评测中涉及的文件分为5类(可重复):0. 选手程序对其有读权限1. 选手程序对其有写权限2. 选手提交的文件(源码或纯文本)3. 数据文件4. 可执行文件哪个程序读?哪个程序写?可用那些语言?属于哪个(些)点?提供下载?源程序是哪个
6、?每个点的运行时空限制?(如果是spj程序则不用指定)二.与网页交互:文件授权脚本分为两部分:初始化、执行二.与网页交互:文件授权脚本在评测机上执行“初始化”和“执行”。读取文件权限以添加sandbox的限制规则。脚本在网页服务器执行“初始化”,获取文件授权,其中包含的信息足以满足页面展示要求二.与网页交互:通信网页服务器和评测机分置在不同的机器上,使用JSON-RPC通信。评测机是RPC Server,网页服务器是RPC Client。这是因为脚本需要执行以执行评测,而网页服务器只需发起评测以及获得信息。二.与网页交互:通信在网页Server和RPC Server间通信也带来了一些新的麻烦之
7、处。要怎么从网页Server异步地向RPC Server发送并接受请求?由于Fortuna OJ使用了php作为服务器脚本语言,对实现异步构成了一些障碍。我使用php-resque项目在后台执行了一个队列,将正在等候的提交加入队列,每次取队首发送请求。二.与网页交互:通信从网页服务器端添加的数据需要同步至评测机。其中要处理同步失败、在提交时确认数据版本等问题。提交时,还需限制正在运行的程序的总数。这些都需要通过恰当的RPC请求设计来实现。RPC请求应包括询问状态、请求同步数据等。这偏离了“脚本化”的主题,在此不做详细介绍。二.与网页交互:通信评测机的RPC Server显然应是异步程序,读写全
8、局变量时要处理好多个线程间的关系,及一些其它问题(system函数居然不是线程安全的?二.与网页交互:通信网页服务器端,php-resque与生成网页的php代码也需异步通信。这里我通过向localhost发送http请求变通解决。三.向下兼容添加普通试题也需要手写脚本吗?既然是通用脚本,为什么不写一个由传统题向脚本自动转化的过程?这样所有题都可以用脚本执行。总结以上就是YAUJ的大体实现。总的来说,它解决了使用表单进行通讯时,通信复杂度随着题目类型增多而增大的问题,提供了很大的可定制性,降低了网页服务器和评测机的耦合。但是也带来了一些可能影响体验的小问题,比如加题时长达半分钟的编译时间。总结另外一些可以被脚本化简化之处总结我的代码可以在Github上找到。不过没有文档,而且一些bug修复后可能我没有commi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初三质量分析会班主任发言
- 电话销售礼仪培训
- 时政播报课件
- 2025版锅炉改造工程设计与施工合同
- 二零二五年瓷砖产品进出口贸易合同
- 2025版电商数据分析与营销托管合同范本
- 二零二五版家庭心理咨询与辅导服务合同书
- 2025版股权投资与资产管理合作协议书
- 二零二五版跨境贸易实务:磋商与订立合同操作指南及案例解析
- 2025版智能家电研发与市场推广合作合同
- 2025-2030全球水飞蓟素原料药行业调研及趋势分析报告
- 2025年江苏无锡宜兴市高塍镇招聘专职网格员36人历年高频重点提升(共500题)附带答案详解
- GB/T 44947-2024机器状态监测与诊断性能诊断方法
- 2025年军队文职考试《公共科目》试题与参考答案
- 【英语】人教版英语七年级英语下册完形填空
- 福州市公安局招聘警务辅助人员笔试真题2023
- 激励与奖惩机制
- 2024年考研英语核心词汇
- 术中获得性压力性损伤预防专家共识2023
- 劳务分包补充协议书
- 天津市和平区2024-2025学年八年级上学期11月期中道德与法治试题
评论
0/150
提交评论