#13. Hydro Judge - Vjudge 正确食用方法
Hydro Judge - Vjudge 正确食用方法
当前没有测试数据。
前言
首先,在参考本文档之前,您需要对 Linux 的基本语法有基本的了解。
其次,本文档涵盖了多个有关 Hydro Cli 与 MongoDB 的语法,请您悉知,以便您能快速按照教程配置:
Hydro Cli
添加域:hydrooj cli domain add <Domain ID> <superuser uid> <Domain Name> <Domain Notice>
进入数据库:hydrooj db
MongoDB(进入 hydrooj db 后执行的命令)
更新域 mount(能够识别出对应 RemoteJudge):db.domain.updateOne({_id:'<Remote name>'},{$set:{mount:'<Remote name>'}});
添加 RemoteJudge 基本配置:db.vjudge.insert({type:'<Remote name>', handle:'<Remote username>', password:'<Remote password>'})
添加 RemoteJudge 基本配置(cookies 版):db.vjudge.insert({type:'<Remote name>', handle:'<Remote username>', password:'<Remote password>',cookie:[<按要求添加 cookies>]})
删除 RemoteJudge 基本配置(当您配置错误时可以使用):db.vjudge.remove({"type" : "<Remote name>"})
查询 RemoteJudge 基本配置:db.vjudge.find()
Codeforces
CF 需要优秀的网络环境才可正常使用,如您遇到任意情况的SE,请先确认您的部署节点能够优秀的访问国际互联网。
首先,请您按照安装插件相关文档安装 Vjudge
插件。
创建插件后,请先进入您图形界面的 OnlineJudge 或使用数据库命令 hydrooj cli domain add codeforces <superuser uid> codeforces codeforces
创建名为 codeforces 的域。接着回到命令行,使用 hydrooj db
进入数据库后,输入 db.domain.updateOne({_id:'codeforces'},{$set:{mount:'codeforces'}});
即可。
使用 http(s)://您的域名/d/codeforces/ (斜杠一定不要漏!)进入您新建的 Codeforces 域下。
在 codeforces 的域设置中,将 allowedLangs
如下配置(在新版即在允许提交的语言中选中所有 codeforces 开头的语言):
codeforces,codeforces.43,codeforces.52,codeforces.50,codeforces.54,codeforces.59,codeforces.61,codeforces.65,codeforces.9,codeforces.28,codeforces.32,codeforces.12,codeforces.60,codeforces.36,codeforces.48,codeforces.19,codeforces.3,codeforces.4,codeforces.51,codeforces.13,codeforces.6,codeforces.7,codeforces.31,codeforces.40,codeforces.41,codeforces.67,codeforces.49,codeforces.20,codeforces.34,codeforces.55
由于 vjudge 更新了反爬虫机制,Codeforces RemoteJudge 需要一些特殊手段才能正常工作。
先使用 hydrooj db
进入数据库,使用 db.createCollection('vjudge');
新建一个名为 vjudge
的表,并使用以下命令在表中插入条目:
db.vjudge.insert({type:'codeforces', handle:'<your username>', password:'<your password>',cookie:['JSESSIONID=<your JSESSIONID>;Path=/; HttpOnly','39ce7=<your 39ce7 cookies>; 70a7c28f3de=<your 70a7c28f3de cookies>']})
这里的 <your JSESSIONID>
指的是当你打开 Codeforces 时,网站所用的 cookie 名称,<39ce7>
与 70a7c28f3de
同理。在下方,我们给您了一些相关配置图片,以提供帮助。
注意,本操作只能在已登录 Codeforces 的状态下进行!!!
在你的 cookie 中找到含有这两个名称的项,请您复制他们的内容并替换 <your JSESSIONID>
、 <39ce7>
与 <70a7c28f3de>
的内容。注意,请务必不要保留尖括号!
到此,您的数据库配置就止步于此了。
配置完成后,依旧进入 http(s)://您的域名/d/codeforces/ ,并将如下配置添加至 langs 设置末尾:
codeforces:
execute: none
display: Codeforces
domain:
- codeforces # Allow domain 'codeforces' to use these languages
codeforces.43:
highlight: cpp astyle-c
monaco: cpp
display: GNU GCC C11 5.1.0
comment: //
codeforces.52:
highlight: cpp astyle-c
monaco: cpp
display: Clang++17 Diagnostics
comment: //
codeforces.50:
highlight: cpp astyle-c
monaco: cpp
display: GNU G++14 6.4.0
comment: //
codeforces.54:
highlight: cpp astyle-c
monaco: cpp
display: GNU G++17 7.3.0
comment: //
codeforces.59:
highlight: cpp astyle-c
monaco: cpp
display: Microsoft Visual C++ 2017
comment: //
codeforces.61:
highlight: cpp astyle-c
monaco: cpp
display: GNU G++17 9.2.0 (64 bit, msys 2)
comment: //
codeforces.65:
highlight: cpp astyle-cs
monaco: csharp
display: C# 8, .NET Core 3.1
comment: //
codeforces.9:
highlight: cpp astyle-cs
monaco: csharp
display: C# Mono 6.8
comment: //
codeforces.28:
highlight: d
monaco: plain
display: D DMD32 v2.091.0
comment: //
codeforces.32:
highlight: go
display: Go 1.15.6
comment: //
codeforces.12:
highlight: haskell
display: Haskell GHC 8.10.1
comment: --
codeforces.60:
highlight: java astyle-java
monaco: java
display: Java 11.0.6
comment: //
codeforces.36:
highlight: java astyle-java
monaco: java
display: Java 1.8.0_241
comment: //
codeforces.48:
highlight: kotlin
display: Kotlin 1.4.0
comment: //
codeforces.19:
highlight: ocaml
monaco: plain
display: OCaml 4.02.1
comment: ['(*','*)']
codeforces.3:
highlight: pascal
display: Delphi 7
comment: //
codeforces.4:
highlight: pascal
display: Free Pascal 3.0.2
comment: //
codeforces.51:
highlight: pascal
display: PascalABC.NET 3.4.2
comment: //
codeforces.13:
highlight: perl
display: Perl 5.20.1
comment: '#'
codeforces.6:
highlight: php
display: PHP 7.2.13
comment: //
codeforces.7:
highlight: python
display: Python 2.7.18
comment: '#'
codeforces.31:
highlight: python
display: Python 3.9.1
comment: '#'
codeforces.40:
highlight: python
display: PyPy 2.7 (7.3.0)
comment: '#'
codeforces.41:
highlight: python
display: PyPy 3.7 (7.3.0)
comment: '#'
codeforces.67:
highlight: ruby
display: Ruby 3.0.0
comment: '#'
codeforces.49:
highlight: rust
display: Rust 1.49.0
comment: //
codeforces.20:
highlight: scala
display: Scala 2.12.8
comment: //
codeforces.34:
highlight: javascript
display: JavaScript V8 4.8.0
comment: //
codeforces.55:
highlight: javascript
display: Node.js 12.6.3
comment: //
可以看到,不需要删除已有的配置,只需要添加到末尾即可。
配置完成并保存后,之后回到你的 主机/服务器 命令行,使用 pm2 restart hydrooj
重启 Hydro ,静等题目自动添加。
若能够持续添加,那么您的题目就可进行 Codeforces RemoteJudge 评测了!
Luogu
洛谷远端评测为洛谷开放平台收费项目, HydroOJ 作为首批接入洛谷开放平台的在线评测系统,实现了完整的远程评测体验,您可以在 Hydro 中导入洛谷全部题目,定期更新,复制题目,编辑题面,发起评测和接收所有的子评测详细结果,享受洛谷所有题目评测。详情请联系 kkksc03 或联系 undefined 或加入 QQ 群(1085853538)了解详情。
POJ
POJ
暂未支持验证码登录,所以配置相对简单一些。
先使用 Hydro Cli 工具创建 POJ 的域。hydrooj cli domain add poj <superuser uid> poj poj
使用 hydrooj db
进入 Hydro 数据库,再使用 db.domain.updateOne({_id:'poj'},{$set:{mount:'poj'}});
在表内插入 POJ 评测数据。
若未创建,请按照上述方法,建立一个名为 vjudge
的表,再在表内添加您的用户名和密码。
db.vjudge.insert({type:'poj', handle:'<poj username>', password:'<poj password>'})
回到您的 OJ 主页,在 “管理域->编辑域资料->域内允许使用的提交语言” 中,添加如下语言限制:
poj,poj.0,poj.1,poj.2,poj.3,poj.4,poj.5,poj.6
然后进入 “控制面板 -> 系统设置 -> langs” ,将如下配置添加到配置末尾:
poj:
display: POJ
execute: /bin/echo Invalid
domain:
- poj
poj.0:
display: G++
monaco: cpp
highlight: cpp astyle-c
comment: //
poj.1:
display: GCC
monaco: c
highlight: c astyle-c
comment: //
poj.2:
display: Java
monaco: java
highlight: java astyle-java
comment: //
poj.3:
display: Pascal
monaco: pascal
highlight: pascal
comment: //
poj.4:
display: C++
monaco: cpp
highlight: cpp astyle-c
comment: //
poj.5:
display: C
monaco: c
highlight: c astyle-c
comment: //
poj.6:
display: Fortran
monaco: plain
highlight: plain
配置完成后,请点击“保存更改”。
所有配置将在重启 Hydro 后生效。
温馨提示:POJ 的 C系列语言 评测不支持使用 bits/stdc++.h
库。
USACO
正在尝试中.....
SPOJ
SPOJ 账号的注册需要用到 reCAPTCHA
验证码,但你无法在国内网络使用它,请自行查找解决方案。
前往 SPOJ 注册,注册是会弹出人机验证,注册完成后先试着 AC 测试题目,确保账户没问题后继续操作。
创建 ID 为 spoj
的域,使用 hydrooj db 进入数据库后,插入一条 SPOJ
评测数据:
db.domain.updateOne({_id:'spoj'},{$set:{mount:'spoj'}})
插入上述数据完成后,使用命令行进入 vjudge
表中,并使用如下命令插入帐密条目:
db.vjudge.insert({type:'spoj', handle:'<spoj username>', password:'<spoj password>'})
Update1:SPOJ 原定是需要添加 cookies
配置的,后期排查错误时发现,当你执行上述命令时,Hydro
会在数据库自动添加你的 cookies
。后期若要调整登录用户,请勿删除或改动 cookies
配置。
进入 spoj
的域设置,在 allowedLangs
或 域内允许提交的语言
下添加如下配置:
spoj,spoj.11,spoj.41,spoj.44,spoj.5,spoj.21,spoj.56,spoj.22,spoj.4,spoj.116,spoj.6,spoj.12
将如下配置添加至 控制面板 -> langs
设置末尾:
spoj:
display: SPOJ
execute: /bin/echo Invalid
domain:
- spoj
spoj.11:
display: C (gcc 8.3)
monaco: c
highlight: c astyle-c
comment: //
spoj.41:
display: C++ (g++ 4.3.2)
monaco: cpp
highlight: cpp astyle-c
comment: //
spoj.44:
display: C++14 (gcc 8.3)
monaco: cpp
highlight: cpp astyle-c
comment: //
spoj.5:
display: Fortran (gfortran 8.3)
monaco: plain
highlight: plain
spoj.21:
highlight: haskell
display: Haskell (ghc 8.4.4)
comment: --
spoj.56:
highlight: javascript
display: Node.js (node 11.12.0)
comment: //
spoj.22:
display: Pascal (fpc 3.0.4)
monaco: pascal
highlight: pascal
comment: //
spoj.4:
highlight: python
display: Python (cpython 2.7.16)
comment: '#'
spoj.116:
highlight: python
display: Python 3 (python 3.7.3)
comment: '#'
spoj.6:
display: Whitespace (wspace 0.3)
monaco: plain
highlight: plain
spoj.12:
display: Brainf**k (bff 1.0.6)
monaco: plain
highlight: plain
配置完成后,请单击“保存”。
所有配置将在重启 Hydro 后生效。
UOJ
UOJ
需要在登录时查看发送的请求中加密过的密码。
使用 Chrome
或 Edge
浏览器打开 UOJ
,按下 F12
打开 DevTools
,切换到“网络”或“Network”选项卡,确保显示“正在录制网络活动”,勾选“保留日志”和“停用缓存”。
请您在打开 DevTools
的情况下正常登录。您会发现 DevTools
窗口里出现了很多请求。CTRL+F
查找 login
,找到一个叫 login 的请求点进去切换到“载荷”可以看见一串加密的密码,复制出来备用。
Chrome
浏览器界面:
Edge
浏览器界面:
使用 hydrooj cli domain add uoj <uid> uoj uoj
命令,创建名为 uoj
的域,把 <uid>
换成超级管理员用户的uid。接下来使用 hydrooj db
进入数据库后,插入一条数据,以用于 vjudge
正常识别并评测:db.domain.updateOne({_id:'uoj'},{$set:{mount:'uoj'}})
,并在 vjudge
表中使用该命令插入如下条目,handle
字段填写你的用户名,password
字段填写准备好的加密的密码:
db.vjudge.insert({type:'uoj', handle:'<uoj username>', password:'<uoj encrypted password>'})
完成后,回到您的 OnlineJudge,输入 http(s)://您的OnlineJudge/d/uoj/domain/dashboard
,进入 UOJ
域的“管理域”界面,将 allowedLangs
或 域内允许提交的语言
填入如下文段:
uoj,uoj.C++,uoj.C++11,uoj.C++14,uoj.C++17,uoj.C++20,uoj.C,uoj.Python3,uoj.Python2.7,uoj.Python3,uoj.Java7,uoj.Java8,uoj.Java11,uoj.Java14,uoj.Pascal
之后进入 http(s)://您的OnlineJudge/d/uoj/manage/dashboard
,即 UOJ
的“控制面板”界面,将如下配置添加至“系统设置” langs 设置末尾:
uoj:
display: UOJ
execute: /bin/echo Invalid
domain:
- uoj
uoj.C++:
display: C++ 03
monaco: cpp
highlight: cpp astyle-c
comment: //
uoj.C++11:
display: C++ 11
monaco: cpp
highlight: cpp astyle-c
comment: //
uoj.C++14:
display: C++ 14
monaco: cpp
highlight: cpp astyle-c
comment: //
uoj.C++17:
display: C++ 17
monaco: cpp
highlight: cpp astyle-c
comment: //
uoj.C++20:
display: C++ 20
monaco: cpp
highlight: cpp astyle-c
comment: //
uoj.C:
display: C
monaco: c
highlight: c astyle-c
comment: //
uoj.Python3:
highlight: python
display: Python 3
comment: '#'
uoj.Python2.7:
highlight: python
display: Python 2.7
comment: '#'
uoj.Java7:
display: Java 7
monaco: java
highlight: java astyle-java
comment: //
uoj.Java8:
display: Java 8
monaco: java
highlight: java astyle-java
comment: //
uoj.Java11:
display: Java 11
monaco: java
highlight: java astyle-java
comment: //
uoj.Java14:
display: Java 14
monaco: java
highlight: java astyle-java
comment: //
uoj.Pascal:
display: Pascal
monaco: pascal
highlight: pascal
comment: //
配置完成后,请单击“保存”。
所有配置将在重启 Hydro 后生效。
BZOJ
BZOJ
在不久前已经关闭原服务器,现在仅有备份站在正常运行,所以 Hydro 目前不支持 BZOJ
的远端评测。若您需要,您可在其他地方下载相关数据,也可参照 RemoteJudge 源码自行编写插件。
一本通题库(YBT)
此段为一本通题库的介绍。开始操作之前,请确保您已经结合 QQ 群(1085853538)内的压缩包进行操作,或在此处下载。
-
升级 hydrooj 至最新版本(至少 4.9.17,更新说明 https://docs.hydro.ac/FAQ/#更新升级)。
-
使用 hydrooj install https://hydro.ac/hydroac-client-0.0.1.tgz 安装相关模块。
-
重启 hydrooj 。
-
使用 【从 Hydro 导入】功能导入该题库。
-
重启 hydrooj 。
至此,题目已经可以正常提交了。
注:此功能并不使用 ssoier 提供的评测接口。