博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用lemon测评系统进行Java竞赛测评
阅读量:6240 次
发布时间:2019-06-22

本文共 2117 字,大约阅读时间需要 7 分钟。

  hot3.png

概述

Project Lemon 是一款由国内神犇(Jia zhi peng)开发维护的开源OI评测机 - 兼容性比Cena更好,更快,更稳定。 资源:

  • Google Code:
  • GitHub:
  • Windows v1.2版: 度盘: | n5m9

网上已经有很多讲解使用的教程,但基本都是介绍C或C++的,如:

  • []
  • () 本文主要介绍一下使用lemon进行Java测评的经验。

配置编译器

  1. 通过菜单:工具->选项->切换到编译器如下所示:

  1. 通过点击+号,打开选择添加JDK编译器,如下所示:

  1. 选择javac.exe及java.exe的路径,如下所示:

请选择您机器的JDK安装目录,选择相应的路径。

  1. 选择后确认预览,如下所示:

点击完成即可添加对应的JDK编译器,如所示:

  1. 设置编译器运行参数 由于我们Java源码期望以UTF-8的编码格式,为了让编译器正常工作,需要为javac添加编译参数, 点击 选项页面编译器TAB页右下角的高级打开如下页面:

这里,我们将编译器参数(即javac的参数)的原内容后添加一个-encoding utf8以保证可以正确编译带中文的UTF-8源文件,否则会报 编译错误,原因是无法识别UTF-8 Java源文件中的中文。 至此,我们就完成了JDK编译器的设置及编译参数的设置。

新建比赛及测试点

  1. 新建比赛 新建比赛,过程可以直接参考 这里我们重点要说下,Java试题如何编写的问题。

  2. 新建试题 我们以一个简单的加法算法Add为例子:在data下添加一个Add文件夹,Add试题中有三个测试点每个测试点对应一个输入和一个输出, 1.out 2.out 3.out文件, 如下所示:

以1.in及1.out为例,输入文件中是以空格隔开的数字如:1 2 3,输出文件中是这些数字通过题目要求的加法运算后的值如 6, 这样一一对应的输入和输出就形成了一个测试点:

回到lemon软件页面点击    控制——>自动添加试题    导入刚刚创建的题库信息,导入时需要配置试题的分数,默认是一百分,各个测试点平分试题的分数,该值后边可以修改。

点击确定后页面如下所示,我们一般直接采用标准输出即可,不必采用文件输出的配置,同时比较模式建议修改为逐行比较模式(忽略多余的空格和制表符)

Java试题类框架

为了让Lemon方便测评,同时方便选手进行作答,个人建议给每个试题都提供一个Java类模板,模板里完成从x.in文件中,并将读入的字符串值转成相应数值 类型等逻辑,仅让选手完成题目要求的算法。拿加法算法的题目来说,提供以下Java模板类:

import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class Add {	/**	*请在该方法中作答,可以在此类中定义新的方法,但不要创建新的类,	*请自动通过单元测试验证该方法逻辑的正确性。	*/		public int answer(int[] items){		}		/**    *【注意】选手请保留这块代码不动	*/    public static void main(String[] args) throws IOException {		FileReader fr = new FileReader("Add.in");        BufferedReader in = new BufferedReader(fr);	        String temp[] = in.readLine().trim().split("\\s+");		int[] items = new int[temp.length];		for (int i=0;i

这样,选手仅需要在answer(int[] items)方法中完成加法的运行即可,如下所示:

...public class Add {	public int answer(int[] items){		int result = 0;		for (int item : items) {			result += item;		}		return result;		}   ...}

自动收试卷

和cena相比,lemon内置支持更多的编译器,如lemon支持JDK,而cena是不支持的。但lemon却没有cena的自动收试卷的功能。不过没有关系,因为收卷即是将客户端某目录下的文件统一抓取到服务端,因此我们可以使用cena来收卷,再用lemon来改卷,具体如下所示:

即服务端的cena及lemon都创建的比赛目录都指向相同的目录,如d:\test目录,选手机都安装cena客户端,填写好各自姓名及答题目录,答题目录都指向C:\TEST,这样就使用cena服务端进行自动收卷,将各客户端选手的答题收到c:\test\source目录下,用cena收完卷,用lemon就可以进行测评了。

转载于:https://my.oschina.net/stamen/blog/3032414

你可能感兴趣的文章
Mule ESB工程的部署
查看>>
分离被碰撞物体, 求碰撞冲量
查看>>
js移动端 可移动滑块
查看>>
【kruscal】【最小生成树】poj3522 Slim Span
查看>>
jquery ajax提交表单数据的两种方式
查看>>
hdu 2102 A计划-bfs
查看>>
学习集合
查看>>
18校招借鉴
查看>>
JAVA第三次作业
查看>>
2017ICPC北京 J:Pangu and Stones
查看>>
Pandas 数据清洗保存
查看>>
SpringBoot + nodeJS + zookeeper 搭建微服务示例
查看>>
《互联网时代》第二集·浪潮
查看>>
8.10 exec函数
查看>>
Shell命令-文件及内容处理之sort、uniq
查看>>
Android 之文件夹排序
查看>>
Java Assert 用法简介
查看>>
关于redo size(一)
查看>>
We Know What @You #Tag: Does the Dual Role Affect Hashtag Adoption-20160520
查看>>
(转)Eclipse新增安卓虚拟机
查看>>