Skip to content
KingFree edited this page Aug 9, 2012 · 1 revision

我要开发一个完善的OJ!——当然是在上大学后咯。

——经过COGS的再开发,以及阅读、使用过各种OJ后,我有这样一个中二的想法。

OJ最基本的是题目系统+评测系统。我要支持OI的文件IO模式,ACM的标准IO模式,提交答案的题目也要支持。评测插件要搞,交互式也要搞。题目要美观易读,要搞一个OI题目标记语言。可视化编辑器必须有,图片、音乐、视频什么的都能放到题目中。提交题目可以教一个源代码文件,也可以直接在网页上编辑(甚至调试!)代码。

测试数据、评测插件、交互函数库应该有可自定义的格式,以兼容各种不同的东西和标准。最主要,HustOJ和Cena的标准必须兼容!还有,允许通过FPS格式导入导出题目,还要能自动从别的OJ抄题。

评测系统得是动态的,提交完自动评测,不能跳到评测列表里让用户自己找!得解决多提交并发问题,根据题目要求限制函数调用,防止破坏和作弊。把提交代码的相似度列出来看看谁在抄代码。评测结果应当很详细,提供给用户各种信息用以查错。同用户同代码提交应当防止。代码应自动分辨是Unicode还是ANSI用以显示。

比赛系统,要可以显示出来漂亮的比赛信息,要有严格的权限控制。界面由比赛发起人定义,营造比赛氛围。允许定义式OI式还是ACM罚时,还能评测团体对抗赛这种交互的比赛类型。要有赛后详细的评测结果报告和成绩列表,还应该有奖励系统。一场比赛还可以举办多个场次。

用户可以在给定范围内自定题目提交方式、语言。自定义界面风格甚至手写自定义CSS,修改应当利用JS即时生效。可以在论坛里讨论题目,讨论,提交Bug反馈。能@别人,能回复并提醒,能互相发送私信,甚至在线聊天……用户还应有一个可信的等级系统来激励做题。用户还应有分组系统,比赛、题目什么的可以指定某些分组的用户才能看到。还能同步新浪微博、人人网什么的。

要有强大的帮助功能,有强大的题目索引功能,详细的分类系统,靠谱的评分系统,是管理员定义还是用户投票。对每个题目的来源也要你弄清楚,相似甚至相同的题目应该明确。题目的不同语言一并保留,各翻译版本保留最佳版本。

管理员要有十分完善的权限制度,各司其职。允许普通用户在审核情况下添加题目、举办比赛什么的(并赋予相应权限)。还要有很好的公告系统和新闻系统、页面系统什么的。

所有操作都要写入日志。定期要进行备份数据库。

系统要支持多国语言,尤其要支持OpenCC直接转换页面。几乎全部界面都应该是动态生成的,要给用户最好的、最自由的用户体验。前端必须精心设计,要让用户不看帮助就知道怎么做。架构必须是MVC,编程语言可以考虑Python或Node.js,后端的东西尽量不自己造轮子。但不管功能如何完善,速度必须快,有必要在进行可能很慢的操作时给出用户提示。卖萌什么的(春菜?)要弄,但不要默认,谁喜欢就用,不喜欢也眼不见心不烦。对了,还能自选自写各种插件完善功能——当然别像Discuz!那样臃肿不堪了,太复杂的功能默认应该隐藏起来就像苹果那样。

当然,整个东西完全开源,协议无所谓随便用。安装要简单(一键安装、图形界面什么的),要制作LiveCD可以让各校管理员预览效果,能直接托管到云平台上。能让OI界和ACM界共享这套平台。(呵呵,说不定能一统信息学天下呢——妄想中……)

Clone this wiki locally