atcoder-cli
AtCoder command line tools
- get contest information
- create a project directory for contests
- auto provisioning with custom templates
- linkage with online-judge-tools
- submit your code without specified URL
- auto downloading of sample inputs/outputs
Requirements
node.js
online-judge-tools (optional, but recommended)
Install
$ npm install -g atcoder-cli
Usage
$ acc login # login your atcoder account
$ acc session # check login status
$ # your login session will be saved to a local file, but your password won't be saved
$ # to delete the session file, use `acc logout`
$ acc new abc001 # "abc001/" directory will be created
$ cd abc001/
$ acc contest # show the contest information
$ acc tasks # show task list
$ acc add
$ cd a/
$ vim main.cpp # write your solution
$ acc submit main.cpp # to use submit function, you have to install online-judge-tools
To get detailed information, use
$ acc [COMMAND] -h
Config
$ acc config -h
$ acc config # show all global options
$ acc config <key> <value> # set option
$ cd `acc config-dir`
$ cat config.json # global config file
Provisioning Templates
With using custom templates, you can automatically prepare your template program code or build environment.
When you create new task directories, atcoder-cli can do:
- place the scaffold program file
- copy static files
- exec shell command
show available templates:
$ acc templates
use the template:
$ acc new|add --template <your-template-name>
Or you can set default template:
$ acc config default-template <your-template-name>
Create a new template
$ cd `acc config-dir`
$ mkdir <your-template-name>
$ cd <your-template-name>
$ vim template.json # write your template settings
Options in template.json
{
"task": {
"program": ["main.cpp", ["foo.cpp", "{TaskID}.cpp"]],
"submit": "main.cpp",
"static": ["foo", ["bar","bar_{TaskLabel}"]],
"testdir": "tests_{TaskID}",
"cmd": "echo Hi!"
},
"contest": {
"static": [["gitignore", ".gitignore"]],
"cmd": "echo Ho!"
}
}
"task"
(required)
executed for each tasks.
"program"
(required)
"program": (string | [string, string])[]
Your main program(s). Place main.cpp in the same directory of template.json, and write
"program": ["main.cpp"]
then the program file will be copied to the task directory.
You can rename the file with format strings:
"program": [["main.cpp", "{TaskId}.cpp"]]
The file name of the program file will be "A.cpp" if the task is problem A.
To get detailed information about format strings, use acc format -h
.
"submit"
(required)
"submit": string
The file name to submit.
It enables to omit the filename argument to submit file, so you can run acc submit
instead of acc submit <filename>
.
Format strings are supported.
"static"
(optional)
"static": (string | [string, string])[]
Static assets.
The difference between "program"
and "static"
is:
"program"
files won't be overwrited when usingacc add --force
."static"
files will be overwrited when usingacc add --force
.
"testdir"
(optional)
"testdir": string
The name of the directory that sample cases will be downloaded.
Without this, the directory name will be the value of acc config default-test-dirname-format
.
Format strings are supported.
"cmd"
(optional)
"cmd": string
After copying files and downloading sample cases, the specified command will be executed.
The working directory is the task directory.
Parameters are given as enviromental variables:
$TEMPLATE_DIR
, $TASK_DIR
, $TASK_ID
, $TASK_INDEX
, $CONTEST_DIR
and $CONTEST_ID
contest
(optional)
executed only once when acc new
command runs.
"static"
(optional)
Same as tasks.static
.
"cmd"
(optional)
Same as tasks.cmd
, but $TASK_*
variables do not exist.