挖坑管挖不管埋啦啦啦啦啦啦~
测试了很多网上的开源online judge系统(目前测试:http://oj.jingwei.site time(2016.04.04)),没有一个能完全达到我想要的状态的,(⊙_⊙),反正现在才大二,自己做一个,慢慢来~
- 服务器:首先,服务器这个不是问题,自己本机就是ubuntu,还有一个阿里云一个加拿大一个日本的服务器,先本机测试,再放上vps。
- 原创还是修改开源:其实觉得codeforces挺棒的= =然而并没有开源,其他的要么功能不全,要么功能完备美工太差(这个真不能忍)= =所以没有选择了,自己搞一个吧~
- 现在能想到的以及技术困难:
- web服务器和判题服务器肯定是需要分开的,最好还能在web后台管理中动态添加;
- 基于 Python 和 Django ,现在主流oj似乎都是利用python和django框架,那么自然有它的独到之处,暂且就定为采取这种模式;
- 判题语言至少需要支持c,c++,以及java,考虑到后期维护,
在添加判题服务器时应该附带着更新可支持的判题语言,或者在web端就指定已经支持的语言,然后直接添加判题服务器;(前者先更新判题服务器,通过判题服务器更新web端,后者更新web端,web端存在支持后判题服务器上的语言支持才能作用); - 判题流程:用户提交–>Web界面–>Web服务器在数据库中新建评测–>Web服务器找到应轮到的评测机,下发评测指令和相关数据(用户代码、标准输入输出)–>评测机开始评测,返回结果,web服务器向数据库写入结果–>用户在Web界面获取结果;
- 用户提交:暂时只支持提交代码就好了,提交文件在我看来其实可有可无,还会增加处理的复杂度度,另外,在提交的时候可以做一个小小的检测,比如选择语言错误,或者采用了一些非法代码;
- 1. 用户类型:超级管理员,普通管理员(用于创建比赛),普通用户
- 2. 功能:是否需要增加小组功能?以便对小组发布比赛或者对某些用户发布比赛?或者比赛单纯以密码的形式来区分参与用户?
- web界面,需要有problem,submission,status,rating,contest,about(FAQ);
- 题目:除了常规的信息,增加题目分类(某场比赛的题目自成一个分类,同一个来源自成一个分类等等)和题目标签(水题,DP,暴力等等)(
题目难度等级?无法有效区分) - 提交:和常规oj显示信息相同即可;
- 排名:考虑是否给每道题增加权值?按权值排名或者按解题数目和AC率排名?
- 比赛:题目(可新建可从已有题目导入新建,仅仅导入信息即可
若导入需要可编辑)开始时间,终止时间,是否封榜(管理员和创建者始终需要看到整个榜单),acm-icpc机制和codeforces排名机制(每题一个初始分值,设定分值递减函数),比赛进行中有人AC给创建者推送通知(通知check功能)(考虑给页面单独留出一个板块放通知,超级管理员可全局推送通知,管理员在比赛开始后可推送给参加比赛的人通知),