Skip to content
This repository has been archived by the owner on Dec 29, 2020. It is now read-only.
/ KIDE Public archive

コンパイル・実行・サンプルケーステスト・提出などを自動化する競プロ用ツール (linux/mac向け)

Notifications You must be signed in to change notification settings

algon-320/KIDE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KIDE (Kyopro-Iikanjini-Dekiru-Environment)

競プロ-いい感じに-出来る-環境


インストール

KIDEはGo言語で書かれているので、まずGo言語をインストールしてください。 その後、次のコマンドでダウンロード・ビルドを行います。

$ go get github.com/algon-320/KIDE
$ cd $GOPATH/src/github.com/algon-320/KIDE
$ go build

このコマンドを実行すると、ディレクトリにKIDEという実行ファイルが作成されるはずです。

仕様

対応しているオンラインジャッジ

  • AtCoder
  • Codeforces
  • yukicoder
  • AOJ

対応している言語

言語 指定するときの文字列 ソースファイル拡張子 デフォルトのコンパイルコマンド デフォルトの実行コマンド
C++ "C++" ".cpp" g++ -std=c++11 -o a.out {SOURCEFILE_PATH} ./a.out
Java "Java" ".java" javac {SOURCEFILE_PATH} java Main
Python2 "Python2" ".py" 無し python {SOURCEFILE_PATH}
Python3 "Python3" ".py" 無し python {SOURCEFILE_PATH}

コンパイルコマンド・実行コマンドはsettings.jsonで変更できる。 デフォルト言語もsetting.jsonLanguage->DefaultLanguageNameで指定できる。

言語は比較的容易に追加できる。詳しくはlanguage/ADD_NEW_LANGUAGE.mdを参照。

対応しているエディタ(スニペット用)

  • vscode

このプログラムは、実行ファイルの存在するディレクトリに各種ファイルを生成する。

主な機能

  • kide run: コンパイル & 実行
  • kide dl {問題のURL}: 問題のダウンロード
  • kide tester {問題id}: テスト
  • kide submit {問題id}: 提出
  • kide processer: ソースコードを整形する(提出前にも適用される)
  • kide snippet: スニペット管理
    • エディタ用のスニペット形式で出力
    • ライブラリ用のMarkdown出力

サブコマンドの詳細

run

カレントディレクトリにあるソースコードをコンパイル・実行する。

カレントディレクトリに指定した言語のソースファイルが1つしかない場合はそれをコンパイル・実行する。 複数ある場合はどれを実行するかの選択肢を表示する。 このソースファイルを決める仕組みはtestersubmitでも同じ。

また、前回コンパイルした時とソースコードの内容が一致している場合、コンパイルはスキップされてそのまま実行される。(コンパイルの必要な言語)

コンパイルコマンド・実行コマンドは、settings.jsonで指定することが出来る。

設定項目が存在しない場合は基本的にデフォルトのものが使用される。

オプション

  • --language-l: コンパイル・実行したいソースコードの言語名を指定する(仕様の項目を参照)
    • 使える言語は language/language.go のlanguageListにあるもの
    • デフォルトはsetting.jsonLanguage->DefaultLanguageNameで指定可能

dl {URL}

指定した問題の情報とサンプル入出力をローカルに保存する。 AtCoder、Codeforces、yukicoder、AOJに対応しているが、正しく読み取れない問題もあるので注意。(ほとんど大丈夫なはず)

初めて使うときに、ログイン情報を要求されるので入力する。 (ユーザ名やパスワードを修正する場合は実行ファイルと同じディレクトリに作られるsettings.jsonを変更する。)

ダウンロードするときに問題idが振られる。問題idは大文字小文字の区別なし。

  • AtCoder、Codeforcesの場合はA問題なら"a"、B問題なら"b"といったようになる
  • yukicoderは問題No.が問題idになる(No.001ならidは"001")
  • AOJは問題のID(URLでid=XXXXのXXXX部分)が問題idとなる

AtCoder、Codeforces、yukicoderの場合、コンテストの問題一覧ページのURLを投げることで、一括して問題をダウンロードすることも出来る。

viewで今保存されている問題一覧を表示出来る。引数で問題idを指定すると詳細を表示。

同じ問題IDの場合上書きされることに注意。 (例えば、あるコンテストのA問題をダウンロードして、別のコンテストのA問題をダウンロードすると 初めにダウンロードしたA問題は上書きされて消えてしまう。)

tester {問題id}

指定された問題のサンプル入出力をテストする。runと同じようにコンパイルされた後に、自動でテストが行われる。 全て正解した場合は提出するか尋ねられ、そのまま提出できる。

オプション --case-c: 番号を指定すると特定のサンプルケースをテスト出来る

kide submit {問題id}

指定した問題に対してソースコードを提出する。ジャッジ結果がACだった場合にソースコードを保存することも出来る。 (初回に保存するか尋ねられる。settings.jsonで変更可能。)

kide processer

settings.jsonGeneral->SourcecodeProcess->Commandで実行コマンドが設定されている場合にソースコードを整形することが出来る。設定しなければ、ソースコードがそのまま整形後のものとして扱われるため、意識する必要はない。

サブコマンドkide processerでは、カレントディレクトリの対象ソースコードを整形し、その結果を出力する。 また、kide submitkide testerで提出する場合に、提出する直前にも整形が行われる

KIDEと実行コマンドとの間では標準入力と標準出力でソースコードをやり取りする。 標準入力から読み取ったソースコードを整形し、標準出力に出力するプログラムを作成し、実行コマンドとして登録することで、ソースコードを整形することが出来る。

また、コマンドの文字列の中の{EXE_DIR}はKIDEの実行ファイルのあるディレクトリのパスに置き換えられる。

cf-mysubmissions {コンテストid}

Codeforcesのコンテストidを指定し、そのコンテストにおける自分の提出のジャッジ結果を表示する。

「In Queue」の提出が存在する場合、1分毎に確認し、ジャッジ結果が更新されていた場合その結果を表示する。

snippet

対応しているエディタ用のスニペットを出力したり、ライブラリ用にMarkdownを出力する。 これらは標準出力に書き込まれるため、必要に応じてリダイレクションなどでファイルに出力する。

スニペットは項目ごとに1つのファイルを作る。形式は次の通りで、ファイル名は{filename}.snipにする必要がある。

<NAME> {名前}
<TRIGGER> {スニペットを発動させる文字列}
<TAG> {タグ}
<*NOTE>
複数行で説明などを記述できる。
Markdown出力する際にそのまま出力されるので、Markdown記法を用いることが出来る。

- pandocなどでHTMLやTeX形式に変換することが出来て便利そう
- `snippet`コマンド
- $F_i = F_{i-1} + F_{i-2}$

<*CODE>
// ここにコードを書く(複数行)
printf("Hello,World\n");
printf("sample snippet\n");

初回実行時にスニペットのある親ディレクトリを尋ねられるので絶対パスで入力する。 再帰的に.snipファイルを検索するため、親ディレクトリ以下の構成については自由。

コマンドを実行するとどのエディタ用のスニペットを出力するか尋ねられる。 ここで、markdown出力を指定することができる。

使い方

KIDEをダウンロードコンパイルしてあり、KIDEという実行ファイルをパスの通ったディレクトリに配置してあるという 前提で、AtCoder Practice Contestを例に説明します。

  1. 適当なディレクトリに入る
  2. ウェブブラウザでBeta版AtCoderの「A - はじめてのあっとこーだー(Welcome to AtCoder)」を開く link
  3. 問題のURLをコピーする
  4. $ KIDE dl https://beta.atcoder.jp/contests/practice/tasks/practice_1を実行する
  5. AtCoderアカウントのユーザ名・パスワードを聞かれるので入力
  6. サンプルケースが保存される。
  7. ソースコードを作成する(例としてC++を想定) ここでディレクトリに.cppのファイルが複数ある場合、KIDE runKIDE testerKIDE submitでコンパイルする対象を選択する画面が出る。
  8. テストする
    • C++以外の言語を使う場合は$ KIDE run --language Pythonなどと指定すること
    • $ KIDE runを実行すると先ほど書いたソースコードがコンパイルされて実行される(実行するだけなので、入力などは自分で書く)
    • $ KIDE tester A --case 1を実行するとサンプル1がテストされる
    • $ KIDE tester Aを実行するとサンプル1、サンプル2がテストされ、どちらとも正解した場合はこのまま提出するかを尋ねられる
  9. 提出する
    • testerコマンドで自動提出しない場合はsubmitコマンドを用いる
    • $ submit Aで提出できる。この場合、サンプルのテストを行わずに提出するので注意。
  10. ジャッジされるのを待つ
  11. ジャッジ結果が表示される
    • ACした場合、ソースコードを保存するか尋ねられる。保存したい場合は保存するディレクトリを指定する。(settings.jsonで変更可能)
    • 保存を有効にするとこれ以降ACしたときに自動的に指定したディレクトリに保存される。
    • このとき、問題URL・提出URL・提出日時・ステータス(Accepted)がソースコードの先頭にコメントアウトされて追加されたものが保存される。
  12. あとは精進するだけ!

settings.jsonの例

{
  "General": {
    "SaveSourceFileAfterAccepted": true,
    "SaveSourceFileDirectory": "{EXE_DIR}/ac_sources"
  },
  "Language": {
    "DefaultLanguageName": "C++",
    "C++": {
      "CompileCommand": "g++ -std=c++14 -O0 -g -o a.out {SOURCEFILE_PATH}",
      "RunningCommand": "./a.out"
    },
    "Java": {
      "CompileCommand": "javac {SOURCEFILE_PATH}",
      "RunningCommand": "java Main"
    },
    "Python": {
      "CompileCommand": "",
      "RunningCommand": "python {SOURCEFILE_PATH}"
    },
    "Python2": {
      "CompileCommand": "",
      "RunningCommand": "python {SOURCEFILE_PATH}"
    },
    "Python3": {
      "CompileCommand": "",
      "RunningCommand": "python {SOURCEFILE_PATH}"
    }
  },
  "OnlineJudge": {
    "AOJ": {
      "Handle": "aoj_handle",
      "Password": "********"
    },
    "AtCoder": {
      "Handle": "atcoder_handle",
      "Password": "********"
    },
    "Codeforces": {
      "Handle": "codeforces_handle",
      "Password": "********"
    },
    "yukicoder": {
      "Handle": "yukicoder_handle",
      "Password": "********"
    }
  },
  "snippet_manager": {
    "root_dir": "/home/ユーザ名/competitive_programming/libraries(snippets)"
  }
}

About

コンパイル・実行・サンプルケーステスト・提出などを自動化する競プロ用ツール (linux/mac向け)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages