#samples #submit #sample #config-file #test #cli-client

app kattis

从终端管理 Kattis 的提交、样例和模板

5 个版本

0.2.3 2020 年 12 月 6 日
0.2.2 2019 年 11 月 21 日
0.2.1 2019 年 10 月 17 日
0.2.0 2019 年 10 月 17 日
0.1.0 2019 年 10 月 15 日

#2389命令行工具

33 每月下载次数

MIT/Apache

67KB
1.5K SLoC

Kattis 客户端

警告:这是一个非官方客户端,可能会在未通知的情况下崩溃。如果发生这种情况,请留下问题。

功能

  • 使用代码模板减少输入。
  • 自动下载问题样例并测试您的解决方案。
  • 在不离开终端的情况下提交解决方案并获取更新。

安装

使用 Cargo

您可以使用 Rust 包管理器 Cargo 轻松安装此工具。

cargo install kattis

安装通常需要一分钟。同时,您可以准备您的 配置

示例用法

为了说明如何使用此工具,我们将解决 Aaah 问题。您可以在 examples 目录中找到此示例中使用的配置和文件。

如果您还没有,您必须创建一个新的 模板。模板基本上是一个包含所有样板代码的裸机解决方案的文件夹。更多详细信息请参阅 此处

我们的首要任务是找到问题的 id:aaah。这将由客户端用于下载所有问题的样例并设置新的测试环境

kattis new --problem aaah --template rust

默认情况下,此命令将在名为 aaah 的新目录中创建,我们将找到我们的模板(在这种情况下,名为 rust 的模板)。

在此阶段,我们将编写我们的解决方案,当我们认为我们已经有一个可以工作的解决方案时,我们可以通过运行来测试我们的假设

cd aaah
kattis test

这将运行 kattis.yml 中指定的构建命令,然后是运行命令,为每个样例运行一次。如果我们的解决方案是正确的,我们应该看到以下输出

Running test case: aaah.1
Correct
Running test case: aaah.2
Correct

如果我们的解决方案是错误的,我们将会看到类似的东西(实际输出已着色以提高可读性)

Running test case: aaah.1
Correct
Running test case: aaah.2
Wrong Answer

Input:
aaah
ah

Found:
uh oh

Expected:
go

在提交之前测试您的代码不仅会使调试更容易,而且还可以减少您出错测试用例的可能性。在包含惩罚的比赛中,这尤其重要。

当您确信您的解决方案是正确的时,您可以通过运行轻松地提交您的解决方案

kattis submit

系统会弹出一个简短摘要,说明将要提交的内容,并附带一个确认提示。如果你回答 y,你的提交将被发送,你应该看到你的提交状态定期更新

Language: Rust
Files:
  - ./main.rs
Main Class:
Proceed with the submission? (y/N) y
Submission ID: 4253057
Compiling...
Running...
Test Case 1/52: Accepted
Test Case 2/52: Accepted
Test Case 3/52: Accepted
Test Case 4/52: Accepted
...
Test Case 42/52: Accepted
...
Test Case 49/52: Accepted
Test Case 50/52: Accepted
Test Case 51/52: Accepted
Test Case 52/52: Accepted

Submission Status: Accepted
Time: 17:47:24
CPU: 0.00 s

正如你所期望的,如果发生严重错误,你将立即得知

Language: Rust
Files:
  - ./main.rs
Main Class:
Proceed with the submission? (y/N) y
Submission ID: 4253066
Compiling...
Compiling...
Test Case 1/52: Accepted
Test Case 2/52: Accepted
Test Case 3/52: Accepted
Test Case 4/52: Accepted
Test Case 5/52: Wrong Answer

Submission Status: Wrong Answer
Time: 17:53:36
CPU: 0.00 s

配置

默认情况下,kattis会在你的用户配置目录中搜索你的配置文件

操作系统 目录 示例
Linux $XDG_CONFIG_HOME/kattis 或 $HOME/.config/kattis /home/alice/.config/kattis
macOS $HOME/Library/Preferences/kattis /Users/Alice/Library/Preferences/kattis
Windows {FOLDERID_RoamingAppData} C:\Users\Alice\AppData\Roaming\kattis

你可以通过设置环境变量 KATTIS_CONFIG_HOME 来覆盖默认的配置目录。

在配置目录内部,你可以创建一个全局配置文件 kattis-global.yml。你可以通过运行 kattis config show 来打印这个文件的路径

凭证

为了从命令行进行提交,你需要下载适当的凭证。这些凭证可以在这里找到。如果你想在这个客户端上使用open.kattis.com以外的任何域名,你可以在 <kattis> 找到凭证,其中 <kattis> 是域名,例如 https://po.kattis.com/download/kattisrc

与官方的提交CLI不同,这个客户端不需要在您的家目录中存储凭证。相反,它们存储在配置目录内的 credentials 文件夹中。

你可以根据需要命名包含凭证的文件。稍后,例如当进行新的提交时,你可以使用此名称告诉客户端提交到不同的Kattis域名。这在比赛期间非常有用。

默认情况下,客户端将搜索名为 open.kattis.com 的凭证。这种行为可以通过更改环境变量 KATTIS_HOST 或通过命令行标志来覆盖。

模板

模板基本上是一个包含所有样板代码的裸机解决方案的文件夹。它们可以在比赛中节省你大量时间(如果允许的话),这样你就可以花更多的时间在当前的问题上,而不用花费太多时间在编写代码上。

模板存储在配置目录内部的 templates 文件夹中的单独目录中。创建一个新的模板很简单

kattis template new <name>

这将创建一个名为 <name> 的新模板在适当的目录中,并创建一个默认的 kattis.yml 配置文件。

默认情况下,你必须使用标志向客户端提供你想要使用的模板的名称。这种行为可以通过更改全局配置文件(kattis-global.yml)中的 default_template 属性来覆盖。

kattis.yml 文件

在这个 YAML 文件中,你可以配置模板的构建方式,要提交哪些文件,等等

字段 描述
samples 存储样本的目录
files 要提交给裁判的文件列表
language 解决方案编写使用的语言
主类 可选。指定主类
构建 构建解决方案时需要按顺序执行的命令列表
运行 运行解决方案时使用的命令

注意,对于像Python这样的解释型语言,不需要构建步骤,因此可以留空 构建 字段。

当使用模板通过 kattis new 命令创建解决新问题的解决方案时,将创建两个附加字段

字段 描述
主机名 提交时使用的凭据名称
问题 解决该问题的问题的ID

依赖

~24–35MB
~597K SLoC