#13. Hydro Judge - Vjudge 正确食用方法

Hydro Judge - Vjudge 正确食用方法

No testdata at current.

前言

首先,在参考本文档之前,您需要对 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

首先,请您按照安装插件相关文档安装 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 需要在登录时查看发送的请求中加密过的密码。

使用 ChromeEdge 浏览器打开 UOJ,按下 F12 打开 DevTools,切换到“网络”或“Network”选项卡,确保显示“正在录制网络活动”,勾选“保留日志”和“停用缓存”。

请您在打开 DevTools 的情况下正常登录。您会发现 DevTools 窗口里出现了很多请求。CTRL+F 查找 login ,找到一个叫 login 的请求点进去切换到“载荷”可以看见一串加密的密码,复制出来备用。

Chrome 浏览器界面:

Chrome UOJ 查找加密密码

Edge 浏览器界面:

Edge UOJ 查找加密密码

使用 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)内的压缩包进行操作,或在此处下载

  1. 升级 hydrooj 至最新版本(至少 4.9.17,更新说明 https://docs.hydro.ac/FAQ/#更新升级)。

  2. 使用 hydrooj install https://hydro.ac/hydroac-client-0.0.1.tgz 安装相关模块。

  3. 重启 hydrooj 。

  4. 使用 【从 Hydro 导入】功能导入该题库。

  5. 重启 hydrooj 。

至此,题目已经可以正常提交了。

注:此功能并不使用 ssoier 提供的评测接口。