0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

atcoder-cli に online-judge-template-generator を導入した

Posted at

動機

久しぶりに AtCoder に取り組むにあたって、online-judge-tools が動かなくなっていたので、これを機に環境をいろいろ再構築してみました

やったこと

継続

新規

  • online-judge-tools を再インストールした
  • online-judge-template-generator を導入し、atcoder-cli から呼ぶようにして問題文を解析して柔軟なテンプレートが作られるようにした

online-judge-tools + atcoder-cli

記事が沢山あるので割愛します

online-judge-tools の再インストール

久々に使用したところ ModuleNotFoundError: No module named 'xxx' とエラーが出力され使用できませんでした
pip3 uninstall online-judge-tools; pip3 install online-judge-tools で再インストールしても改善せず…

公式にあるように、強制的に再インストールすることで解決しました
Python 環境が壊れているとの事です
参考:oj/INSTALL.ja.md at master

pip3 install --force-reinstall online-judge-tools

online-judge-template-generator の導入

以前は、atcoder-cli のテンプレート機能を使っていましたが、atcoder-tools の問題文の解析による柔軟なテンプレート作成機能を試してみて、これは良さそうだと思いました
いろいろ Github を巡っていて、同等の機能が online-judge-tools の派生プロジェクトの online-judge-template-generator で出来る事が分かったので、導入してみました
atcoder-cli には、online-judge-template-generator と連携する機能はありませんが、任意のコマンドを実行できるため、それを使って組み込みました
まぁ issues に作者さんが書かれている内容、ほとんどそのままですが…
参考:Issue #25

1. インストール

pip3 install online-judge-template-generator

2. 独自のテンプレートを用意する

デフォルトのテンプレートを使用するなら不要です
atcoder-cli のテンプレートフォルダに置くことにしました

cd `acc config-dir`/py
code main_gen.py

3. atcoder-cli の template.json を設定する

template.json
{
    "task": {
        ...
        "cmd": "oj-template -t $TEMPLATE_DIR/main_gen.py `acc task $CONTEST_ID $TASK_ID | awk -F ' ' '{print $NF}'` > main.py"
    }
}

acc task で取得できる問題名にスペースが含まれている事があったので、awk のパラメタを $NF にしました
デフォルトのテンプレートを使用する場合は、-t のパラメタを変更してください

4. テストケースを取得する

後はテストケースを取得すればOKです

acc n abc100

シェルコマンド

コードのテストも acc と同じ感覚で実行できるように、ラッピングするシェルコマンドを作りました
またフォルダを指定するだけで、main.py をエディタで起動したり、提出できるようにしています

acb
#!/bin/bash
set -eu

# atcodr-cliラッパー

# 引数チェック
: $1

if [ $1 = "-h" ]; then
    echo "Usage: acb [command]"
    echo ""
    echo "Commands:"
    echo "  new|n [options] <contest-id>                create new contest project directory"
    echo "  add|a [options]                             add new directory for the task in the project directory"
    echo "  edit|e <task-dir>                           open main.py by VS Code"
    echo "  test|t <task-dir>                           check main.py with tests"
    echo "  submit|s <task-dir> [options] [filename]    submit the program"
    exit 0
fi

if [ $1 = "new" -o $1 = "n" ]; then
    acc new ${@:2}
    echo
    echo "[@] create <$2> directroy."
    ls
    exit 0
fi

if [ $1 = "add" -o $1 = "a" ]; then
    acc add ${@:2}
    echo
    ls -1td */ | sed 's/\///g' | head -n1 | echo "[@] create <$(cat)> directory"
    ls
    exit 0
fi

if [ $1 = "edit" -o $1 = "e" ]; then
    # シェルスクリプト内でのcdは呼び出し元のシェルには影響しない
    : $2
    cd $2
    echo "[@] open <$2/main.py> file"
    code main.py
    exit 0
fi

if [ $1 = "test" -o $1 = "t" ]; then
    : $2
    cd $2
    oj t -c "python3 main.py" -d ./tests/
    exit 0
fi

if [ $1 = "submit" -o $1 = "s" ]; then
    : $2
    cd $2
    acc submit ${@:3}
    exit 0
fi

まとめ

AtCoder の環境を再構築して、更に online-judge-template-generator を導入しました
緑色目指して、コツコツやろう!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?