Nodejs VJ Submitter项目欢迎有兴趣的人加入
Nodejs VJ Submitter项目欢迎有兴趣的人加入
什么是VJ?
我相信CNODE的大家庭中有着跟我一样的ACMer。自从高中时期被MatRush带上了OI的不归路之后,就一直奋斗到现在。
首先作为一名ACMer,在OJ(Online Judge)上刷题是必不可少的。而VJ(Virtual Judge)就类似于N个OJ的集合体。其中国内有代表性的两个VJ分别是HUST的和BNU。本屌虽然是蒻菜,但也不甘寂寞。在完成了自己学校的OJ之后,又闲得蛋疼地准备搞VJ。
这么解释吧,每天跑不同的OJ多累啊,直接在VJ上注册一个帐号,里面囊括了所有该系统所支持的所有OJ题目。你把代码提交上去之后,VJ在后台以自己在各OJ上的帐号提交过去,然后获取到代码之后把运行结果从各OJ上爬下来并做记录。这就是VJ的流程了。
什么是VJ Submitter?
VJ Submitter只是VJ的一小部分——它没有任何前端逻辑也没有任何数据操作,只是简单的提交逻辑并返回结果。它的流程就是
穿参数给Submitter,Submitter将代码提交到相应OJ,爬下结果返回。
为什么要一起参与?
世界上的OJ千千万,本屌只是想大家一起参与完善这个Submitter,加入尽可能多的OJ的提交返回逻辑。当然,既然这个项目是开源的,大家也尽可以拿去给自己的VJ添砖加瓦(如果你也在做的话)。
VJ Submitter是用什么写的?
坛子里逛了一圈,基本上是什么做网站的帖子,做应用的帖子,甚至于是做服务器端的帖子。
可是node.js这种脚本也是完全可以做本地化的操作的,很多情况下它可以做跟bash之类可以做的事。大材小用,我曾经就用PHP-CLI写过一个网站后台跑的发送邮件、短信消息队列的本地脚本。
所以没必要把思想限死,大材小用就大材小用呗,反正开发的开心、简单就好。
所以VJ Submitter是一个基于node.js的项目。
怎么参与?
https://github.com/XadillaX/vjudge-submitter
目前项目发布在我的github上,欢迎fork之类的。目前粗略的写好了submitter的基类,并初步写好了关于两个OJ的提交类。
有兴趣的同鞋可以找我喔~
Nodejs VJ Submitter项目欢迎有兴趣的人加入
什么是VJ?
我相信CNODE的大家庭中有着跟我一样的ACMer(Algorithm Competition Member)。自从高中时期被MatRush带上了OI(Olympiad in Informatics)的不归路之后,就一直奋斗到现在。
首先作为一名ACMer,在OJ(Online Judge)上刷题是必不可少的。而VJ(Virtual Judge)就类似于N个OJ的集合体。其中国内有代表性的两个VJ分别是HUST的和BNU。本屌虽然是蒻菜,但也不甘寂寞。在完成了自己学校的OJ之后,又闲得蛋疼地准备搞VJ。
这么解释吧,每天跑不同的OJ多累啊,直接在VJ上注册一个帐号,里面囊括了所有该系统所支持的所有OJ题目。你把代码提交上去之后,VJ在后台以自己在各OJ上的帐号提交过去,然后获取到代码之后把运行结果从各OJ上爬下来并做记录。这就是VJ的流程了。
什么是VJ Submitter?
VJ Submitter只是VJ的一小部分——它没有任何前端逻辑也没有任何数据操作,只是简单的提交逻辑并返回结果。它的流程就是:
// 示例代码:提交逻辑
const submit = async (oj, code, problemId) => {
try {
const response = await fetch(`https://${oj}.com/submit`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
code,
problemId
})
});
const result = await response.json();
return result;
} catch (error) {
console.error('提交失败:', error);
return { success: false, message: '提交失败' };
}
};
这段代码展示了如何通过HTTP POST请求将代码提交到指定的OJ,并处理响应结果。fetch
函数用于发起网络请求,async/await
语法使得异步操作更易读。
为什么要一起参与?
世界上的OJ千千万,本屌只是想大家一起参与完善这个Submitter,加入尽可能多的OJ的提交返回逻辑。当然,既然这个项目是开源的,大家也尽可以拿去给自己的VJ添砖加瓦(如果你也在做的话)。
VJ Submitter是用什么写的?
坛子里逛了一圈,基本上是什么做网站的帖子,做应用的帖子,甚至于是做服务器端的帖子。
可是node.js这种脚本也是完全可以做本地化的操作的,很多情况下它可以做跟bash之类可以做的事。大材小用,我曾经就用PHP-CLI写过一个网站后台跑的发送邮件、短信消息队列的本地脚本。
所以没必要把思想限死,大材小用就大材小用呗,反正开发的开心、简单就好。
所以VJ Submitter是一个基于node.js的项目。
怎么参与?
目前项目发布在我的github上,欢迎fork之类的。目前粗略的写好了submitter的基类,并初步写好了关于两个OJ的提交类。
// 示例代码:基类
class BaseSubmitter {
constructor(ojName) {
this.ojName = ojName;
}
async submit(code, problemId) {
throw new Error('未实现');
}
}
有兴趣的同鞋可以找我喔~
链接:
希望更多的人能够参与到这个项目中来,共同完善VJ Submitter,让它成为更加全面和强大的工具!
大家都对网络应用更感兴趣么?其实本质上它也就是一个爬虫啊。
https://github.com/wangzuo/pku 以前用Python写的pku cli,这种工具在练习的时候可能挺有用的吧
有点这个意思,但又不是这个意思-。 -
VJ的第一反应是vijos. 目前仍处于学习阶段,作为曾经的ioer只能表示支持了。
Node.js VJ Submitter 项目欢迎有兴趣的人加入
什么是VJ?
我相信CNODE社区中的许多人都与我一样,是一名ACMer(算法竞赛爱好者)。自高中时期开始接触OI(信息学奥赛)后,我一直致力于提高自己的算法能力。
作为一名ACMer,在OJ(在线评测系统)上刷题是必不可少的。VJ(虚拟评测系统)类似于多个OJ的集合体,国内比较有代表性的有两个:HUST的VJ和BNU的VJ。虽然我只是一个新手,但我也希望能在这个领域有所贡献。因此,我决定开发一个新的VJ系统。
VJ的基本思路是这样的:你不需要每天登录不同的OJ进行刷题,只需要在VJ上注册一个账号,VJ会自动处理所有OJ的提交和结果。具体来说,当你在VJ上提交代码时,VJ会在后台使用特定账号提交到各个OJ,并获取运行结果,然后将这些结果记录下来。
什么是VJ Submitter?
VJ Submitter 是VJ的一部分,负责具体的提交逻辑。它的主要功能是:
- 接收参数。
- 将代码提交到相应的OJ。
- 获取并解析运行结果。
- 返回结果。
// 示例代码:基本的VJ Submitter结构
class VJSubmitter {
constructor(ojClient, options) {
this.ojClient = ojClient;
this.options = options;
}
async submit(code) {
try {
// 提交代码到指定的OJ
const submissionResult = await this.ojClient.submit(code);
// 等待结果
const result = await this.ojClient.getSubmissionResult(submissionResult.id);
return result;
} catch (error) {
console.error("Error in submitting code:", error);
return null;
}
}
}
module.exports = VJSubmitter;
为什么要一起参与?
世界上有很多OJ平台,我希望更多的人能参与到VJ Submitter项目的开发中来。我们可以一起完善提交逻辑,支持更多的OJ平台。此外,如果你们也在开发类似的VJ系统,也可以借鉴我们的代码。
VJ Submitter是用什么写的?
我们选择使用Node.js来开发VJ Submitter。尽管Node.js主要用于Web应用开发,但它也非常适合用于编写本地化的脚本。通过使用Node.js,我们可以轻松地实现命令行工具和网络请求等功能。
怎么参与?
VJ Submitter项目的代码托管在GitHub上,欢迎有兴趣的开发者参与。目前,我已经实现了基本的提交逻辑,并为两个OJ平台编写了提交类。如果你有兴趣,请联系我。
GitHub链接: https://github.com/XadillaX/vjudge-submitter
期待你的加入!