码题助手

感谢来读,语文不好,表达有问题的还请指出。以下这段只是我的吐槽,可以跳过。

这个“助手”是这样来的:写题的时候,用了vscode后根本无法忍受devcpp的“丑陋”,然而vscode对C++的编译支持的并不好,一时间陷入两难。最终决定写个程序简化编译等做题中常用的功能,现在配合vscode十分舒服。

介绍

  • 名称:acm(因为是码题用的)
  • 功能:
    • 配置外部编译器编译
    • 使用代码模板
    • 自动输入输出
    • 自动测量程序运行时间与使用内存(准确度一般)
    • 自动使用用户提供的数据判题(具体见后文)。
  • 版本:v1.0
  • 作者:Stardust D.L.(Liang)
  • 支持系统:原生Windows 10,Mac OS 10+

下载

个人使用体会

我比较习惯编辑器+命令行的写程序方式,然后每次编译都要写 g++ a.cpp -o a 这么长,很烦,然后就写了这么个简化命令的程序。不过对于习惯GUI的人,可能体验上还是不如GUI。

觉得最好用的是 check 功能,每次写题,先把输入和标准输出打进去,然后改完代码直接check,就能知道这组数据过没过,比以前每次重新输入,目测比对方便多了(已经习惯这种方式了)。

不过怎么着也是个自己用的工具,写的还很简单,不过平常写题用着还是比较方便的。发出来要是能帮到人就很开心了。

至于这个怎么用。。。看看下面的就好了,比C++简单多了(233
另外一些具体内容我没写,(懒

使用

第0步

  • 解压就好了
  • 如果需要请将解压目录加入系统环境变量(*)
  • 请在使用前先将命令行当前目录指定到码题的工作目录(cd myfolder

第1步:准备

  1. 命令行调用 acm(如果您已完成(*))
  2. 如果当前目录不存在acm环境,会显示白色字样,已存在的话会显示绿色 Loaded 字样。接下来等待输入命令
  3. 等待输入的行头可能有两种:
    • >
    • c.cpp > :当前代码文件为c.cpp

第2步:命令介绍

调用完 init 命令就先去配置吧(第3步),配置完再开始用别的命令。

  • init 初始化acm环境
  • clear 清除acm环境
  • exit 退出
  • cls 清空命令行
  • reload 重新载入(设置等)
  • build 编译当前文件
  • run 运行已编译的文件
  • br 等价于build and run
  • new <filename> [-c] 新建文件,filename 请带上扩展名,这样系统会自动匹配您提供的代码模板,-c 可选,指示系统自动将此文件设置为当前文件。
  • kill 干掉运行中的程序(比如死循环了TAT)
  • check 对当前代码,自动编译执行,自动输入输出,自动比对答案。(个人最满意的功能),会显示评测结果和运行时间内存等,注意这里判题是简单比对,一般是忽视行尾空格的(其实就是系统命令fc

关于check功能

请将输入写到\.acm\input.in,标准输出写到\.acm\std.ans,然后调用check

第3步:系统配置

这里很关键,不过也简单。

建议安装MinGW(Devcpp 自带,在安装目录的MinGW64目录下),这样下面的编译器设置就可以指定为 类似这样的
D:\MinGW\bin\g++.exe

acm环境初始化后,系统会在当前目录创建隐藏文件夹.acm,介绍如下:

1
2
3
4
5
6
7
8
9
10
.acm\
templates\ 代码模板们(文件名必须是 base.扩展名)
base.c 默认C代码模板
base.cpp 默认C++代码模板
input.in 输入文件
output.out 输出文件(有输出时会产生)
std.ans 正确输出
checker.json 评测标准
builder.json 编译配置
config.json 系统设置

相关配置文件设置:(能看懂的我就不写了,以下给出的都是建议配置(当然系统环境不同可能会有调整),另外文件为json格式,默认无缩进,可以使用代码格式化工具加上缩进(比如vscode使用快捷键 alt+shift+F

重点
一般只有config.json中的 UseFileInput,UseFileOutput 改为true,builder.json的编译器指定(如果没有把 g++ 加到环境变量中的话)两处需要修改。

checker.json

1
2
3
4
{
"MemoryLimitMB": 256,
"TimeLimitMS": 1000
}

builder.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"WaitTime": 10000, //编译最大时限
"builders": [
{
"Key": 2,//2代表C++编译器
"Value": {
"Arguments": "#input -o #output",
//编译参数,请用#input 代替输入,#output 代替输出,这与编译器所使用的命令格式有关

"Command": "g++"//编译器程序命令(或程序路径)
}
},
{
"Key": 1,//1代表C编译器
"Value": {
"Arguments": "#input -o #output",
"Command": "gcc"
}
}
]
}

config.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"Templates": {//代码模板设置,这里不说明了(我懒了)
"CodeTemplateBase": [
{
"Key": 1,
"Value": "\/templates\/base.c"
},
{
"Key": 2,
"Value": "\/templates\/base.cpp"
}
]
},
"UseFileInput": true,//是否使用文件(input.in)自动输入
"UseFileOutput": true//是否自动输出到文件(output.out)
}

修改配置后一定要用reload命令重新加载,不然配置只有下次启动acm时才生效。

备注

个人感觉最佳搭配编辑器为 Visual Code,使用其内置的终端可以使得编辑与执行始终在一个界面。

可能会有Bug,使用时请留意。
谢谢使用。

本文档可能会有修改。

展望

  • 可能以后会加上HDU,POJ自动提交功能(其实已经实现了,然而没空写细节)
  • 理论上是能跨平台的(比如支持Linux,Mac OS),然而不同系统API不同,技术所限,暂时不支持。要是有同学会 .Net Core 还请教教我。
  • 还有什么建议欢迎发到我邮箱。

感谢

CommandLine

0%