Help us understand the problem. What is going on with this article?

AtCoder のディレクトリ作成・サンプルケースのテスト・提出を自動化する。atcoder-cli と online-judge-tools

AtCoder を快適に解くための2つの CLI ツールを紹介します。
このエントリーで利用している環境は Windows 10, Python 3 です。もちろん他の OS 、言語にも対応しています。

できること

コンテスト用ディレクトリを作成する

Image from Gyazo

  • acc new {コンテストID}
  • コンテスト用ディレクトリが作成される。
    • コンテスト用ディレクトリ配下には問題ごとにディレクトリが切られる。問題ディレクトリ配下には、解答を書く main.py ファイルと、サンプルケースの入力・出力を記述したテスト用ファイルが作成される。
  • ディレクトリ構成は以下の通り。

Contest ID/
 ├ a/
 │ └ main.py
 │ └ test/
 │   └ sample-1.in
 │   └ sample-1.out
 │   └ sample-2.in
 │   └ ...
 ├ b/
 │ └ main.py
 │ └ test/
 │   └ ...
 └ ...

サンプルケースのテストを実行する

Image from Gyazo

  • テストしたい問題のディレクトリで oj t -c "python main.py"
  • サンプルケースのテストを実行し、結果を返す。全ケースでACと出れば成功。

提出する

Image from Gyazo

  • 提出したい問題のディレクトリで acc s
  • 完成したコードを AtCoder に提出する。ブラウザの新しいタブで提出画面が開き、結果が表示される。

導入方法

前提条件

  • node.js がインストール済である
  • Python >3.5がインストール済である

atcoder-cli は node.js で、 online-judge-tools は Python で動くため、これらのインストールが必要です。
インストールがまだの方は、 Chocolatey でのインストールをおすすめします (Windows の場合、Mac なら Homebrew )。
今後のアップデートが非常に楽になります。

Chocolateyを使った環境構築の時のメモ - Qiita

Chocolatey をインストールの上、下記のコマンドを実行すればOKです。

install.ps1
cinst nodejs.install -y
cinst python -y

atcoder-cli と online-judge-tools の導入

以下のチュートリアルを参考に、

  • インストール
  • AtCoder へのログイン

を完了します。

atcoder-cli チュートリアル | わたしろぐ

atcoder-cli と online-judge-tools の両方で AtCoder にログインする必要があります。

設定

atcoder-cli を使いやすいように設定を変更しましょう。
なお、 online-judge-tools には設定がありません。

Introduction to online-judge-tools (Japanese) # 存在しない機能 — online-judge-tools documentation

テンプレート設定

テンプレートを設定しておくと、以下が可能になります。

  • acc s での解答の提出
    • テンプレートがない場合はファイル名を指定する必要があります。
  • acc new {contestId} 実行時に作成される解答用ファイルの雛形の設定
    • コンソール入力の読み取り、Shebang (シバン)など、毎回使うコードを雛形として利用できます。

テンプレートファイルの設定はチュートリアルの「テンプレート設定」に従って行います。

atcoder-cli チュートリアル | わたしろぐ

私は以下のように設定しています。

  • atcoder-cli の Config ディレクトリ

 ├ Config/
 │ └ python/
 │   └ main.py
 │   └ template.json
 │ └ config.json
 │ └ session.json

template.json
{
    "task": {
        "program": [
            "main.py"
        ],
        "submit": "main.py"
    }
}
main.py
#!/usr/bin/env python3

def main():
    N = map(int, open(0).read().split())


main()


#!/usr/bin/env python3 は Shebang です。

AtCoder では Python の実行環境として Python2 と Python3 が選択できます。Shebang を利用して明示的に Python3 を利用することを指定しています。
これを忘れると、提出時に実行環境が1つに絞れないというエラーが出ます。

open(0).read().split() はコンソール入力の読み取りです。

Config の変更

acc config で現在のグローバル設定を確認できます。デフォルトでは以下の通りです。

config.sh
$ acc config
oj-path: C:/Python38/Scripts/oj.exe
default-contest-dirname-format: {ContestID}
default-task-dirname-format: {tasklabel}
default-test-dirname-format: tests
default-task-choice: inquire
default-template: 

これを変更していきます。

$ acc config default-test-dirname-format test

テストディレクトリ名を、online-judge-tools に合わせて変更します。これによって online-judge-tools がテストディレクトリを認識し、サンプルケースの自動テストが可能になります。

$ acc config default-task-choice all

acc new {Contest Id} を実行時、ディレクトリを作成する問題の選択方式を設定します。
デフォルトの inquire では、毎回問題を手動で選択することになります。
私は一度に全てのディレクトリを作成したいので、 all にしています。

$ acc config default-template python

デフォルトで利用したいテンプレートを指定します。
私は python にしていますが、「テンプレート設定」で作成した、最もよく使うテンプレートを各自指定しましょう。

おわりに

以上で atcoder-cli と online-judge-tools の導入が完了し、冒頭の動画のように使用することが可能になります。
快適に AtCoder を楽しみましょう!

protoout-studio
ProtoOut Studioは日本初のプロトタイピング専門スクールです。プログラミングとプランニング(企画)の両方のスキルを兼ね備えた人材輩出を行います。作って発信して、がんがんプロトアウトしていきましょう。
https://protoout.studio
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした