3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

javascriptで始めるAtocder

Last updated at Posted at 2024-05-08

はじめに

この記事ではJavascriptでAtcoderを始める方向けに、問題を効率よく解くための環境構築方法を紹介します。
この環境構築を行うことで、以下のことがコマンド1つで可能になります。

  • テストデータでの自動テスト
  • コマンドライン上からの回答の提出
動作環境

MacOS Ventura 13.5

目次

  1. ojコマンドを使えるようにする
  2. atcode-cliを使えるようにする
  3. テンプレートを追加する
  4. 使い方
  5. コマンド一覧
  6. 参考文献

ojコマンドを使えるようにする

ojコマンドをインストールします。

$ pip3 install online-judge-tools

ojコマンドのバージョンを出力し、コマンドが使えるかを確認します。
online-judge-tools 11.5.1のようにバージョンが出力されていればOKです。

$ oj --version

もしzsh: command not found: ojのようなエラーが出た場合は、以下の手順を試してみてください。

まずはojのファイル位置を確認します。

$ find ~ -name oj 2> /dev/null

出力された文字列に--versionをつけて実行し、実行できるかを確認します。
出力が/Users/test/Library/Python/3.9/bin/ojの場合は以下のように実行します。
この時online-judge-tools 11.5.1のようにバージョンが出力されていればOKです。

$ /Users/test/Library/Python/3.9/bin/oj --version

このままでは使いづらいので、ojで実行できるようにします。
.zshrcにパスを記載します。(筆者の環境でzshを使っていますが、bashなどをお使いの方は.bashrcなど適宜書き込み場所を変えてください)
※ 最後の/ojは消してください

# ojファイルのパスが /Users/test/Library/Python/3.9/bin/oj の場合
export PATH="/Users/test/Library/Python/3.9/bin:$PATH"

atcode-cliを使えるようにする

atcode-cliコマンドをインストールします。

$ npm install -g atcoder-cli

accコマンドのバージョンを出力し、コマンドが使えるかを確認します。
2.2.0のようにバージョン番号が出力されればOKです。

$ acc --version

テンプレートを追加する

以下のコマンドを実行し、config.jsonの場所を確認します。

$ acc config-dir

この時出力されたディレクトリに移動します。
筆者の場合は/Users/test/Library/Preferences/atcoder-cli-nodejsだったので以下を実行しました。

$ cd /Users/test/Library/Preferences/atcoder-cli-nodejs

移動先にあるconfig.jsonを以下のように編集します。

{
	"oj-path": "/Users/test/Library/Python/3.9/bin/oj", //このパスは先ほどのojのパス
	"default-contest-dirname-format": "{ContestID}",
	"default-task-dirname-format": "{tasklabel}",
	"default-test-dirname-format": "test",
	"default-task-choice": "inquire",
	"default-template": "js"
}

jsディレクトリを作成し、main.jstemplate.jsonファイルを作成します。

$ mkdir js
$ cd js
$ touch main.js
$ touch template.json

main.jsに以下を追記します。

"use strict";

const main = arg => {
    const input = arg.trim().split("\n");
}

main(require("fs").readFileSync("/dev/stdin", "utf8"));

template.jsonに以下を追記します。

{
    "task": {
        "program": [
            "main.js"
        ],
        "submit": "main.js"
    }
}

使い方

今回はAtCoder Beginner Contest 314に参加する想定でコマンドを実行していきます。
AtCoder Beginner Contest 314

まずは参加するコンテストコードを確認します。
ブラウザ上でコンテストページに移動し、URLのcontests/以下がコンテストコードです。
今回の場合だとabc314がコンテストコードだとわかります。
AtCoder:公式.png

Atcoder用のディレクトリに移動し、問題のテストデータを取得します。
acc new {先ほどのコンテストコード}を実行すると問題選択することができるので、自分が解きたい問題種別を選択していきます。
複数選択する場合は<space>キーで選択してください。
選択が終わり<Enter>キーで完了するとテストデータを取得できます。

$ cd Atcoder
$ acc new abc314

abc314/contest.acc.json created.
create project of AtCoder Beginner Contest 314
? select tasks (Press <space> to select, <a> to toggle all, <i> to invert selection)
❯◉ A 3.14
 ◯ B Roulette
 ◯ C Rotate Colored Subsequence
 ◯ D LOWER
 ◯ E Roulettes
 ◯ F A Certain Game
 ◯ G Amulets

実行後は以下のようなディレクトリが作成されます。
今回作成されたmain.jsはテンプレートに設定したものが追加されるので、ここに問題の解答をコーディングしてください。

.
└── abc314
    ├── a
    │   ├── main.js
    │   └── test
    │       ├── sample-1.in
    │       ├── sample-1.out
    │       ├── sample-2.in
    │       ├── sample-2.out
    │       ├── sample-3.in
    │       └── sample-3.out
    └── contest.acc.json

解答ができたら自動テストを実行します。
今回はA問題を解いた想定で自動テストを実行しています。

$ cd abc314/a
$ oj t -c "node main.js"

以下のようにACと出力されれば正解です。

[INFO] sample-1
[INFO] time: 0.211756 sec
[SUCCESS] AC

[INFO] sample-2
[INFO] time: 0.106646 sec
[SUCCESS] AC

正解したコードを提出します。
提出コマンド実行時に文字列を入力する必要があるので入力してください。
入力するとブラウザ上で提出画面が表示されるので結果を確認できます。

$ cd abc314/a
$ acc submit -s -- -l 5009
・・・省略
Are you sure? Please type "abca" 

コマンド一覧

// 問題のテストデータを取得
$ acc new xxx (xxxは問題コード)

// テストデータの追加
//(abc314などの問題ディレクトリの場所で実行すると、後からテストデータを追加できます)
$ acc add

// テストの実行
$ oj t -c "node main.js"

// 提出
$ acc submit -s -- -l 5009

参考文献

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?