MCPcopy Index your code
hub / github.com/Tatamo/atcoder-cli

github.com/Tatamo/atcoder-cli @v2.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.2.0 ↗ · + Follow
135 symbols 372 edges 23 files 37 documented · 27%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

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 using acc add --force. - "static" files will be overwrited when using acc 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.

Extension points exported contracts — how you extend this code

SessionInterface (Interface)
(no doc) [4 implementers]
src/session.ts
CookieInterface (Interface)
(no doc) [2 implementers]
src/cookie.ts
Contest (Interface)
(no doc)
src/project.ts
RawTemplate (Interface)
(no doc)
src/template.ts
HasCookieConstructor (Interface)
(no doc)
src/di/index.ts
MockResponse (Interface)
(no doc)
tests/utils/session.ts
SessionResponseInterface (Interface)
(no doc) [1 implementers]
src/session.ts
CookieConstructorInterface (Interface)
(no doc) [1 implementers]
src/cookie.ts

Core symbols most depended-on inside this repo

get
called by 38
src/cookie.ts
SGR
called by 18
src/commands.ts
getCookies
called by 14
src/session.ts
getContestURL
called by 11
src/atcoder.ts
set
called by 11
src/cookie.ts
getAtCoder
called by 11
src/di/index.ts
saveSession
called by 10
src/session.ts
checkSession
called by 9
src/atcoder.ts

Shape

Method 56
Function 55
Interface 14
Class 10

Languages

TypeScript100%

Modules by API surface

src/commands.ts26 symbols
src/cookie.ts22 symbols
src/session.ts21 symbols
src/atcoder.ts15 symbols
src/project.ts14 symbols
tests/utils/session.ts9 symbols
src/template.ts7 symbols
src/facade/oj.ts5 symbols
tests/utils/responseMock.ts4 symbols
src/di/index.ts3 symbols
tests/utils/login.ts1 symbols
tests/utils/cookie.ts1 symbols

For agents

$ claude mcp add atcoder-cli \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact