nodejs
競技プログラミング

競プロでサンプルケースをテストするCLIを作った

github.com/elzup/compep - Debug CLI for Competitive programming C++

compep run

↑ 左が CLI。右がエディタ。
C++ のコードを編集して保存すると、コンパイル、サンプルケースのテストをします。

Node.js で書きました。
ファイル変更の監視に fs.watch, 標準出力のカラーリングに chalk を使っています。

使い方

$ npm install --global compep
$ compep                            # コーディング用のディレクトリで

main.cpp をコーディング。
./testcase/main.testcase.txt にテストケースを書きます。

作業ディレクトリ構成

必要なファイル(main.cpp、テストケース)がない場合最初に作られます。

├── main.cpp
├── out
│   └── main.out
└── testcase
    └── main.testcase.txt

テストしたいケースを以下のフォーマットで書きます。

input values of case1
----
output values of case1
====
input values of case2
----
output values of case2

入力と出力を----区切り、それらのテストケースを==== 区切りです。(この辺はまだ軽くしか考えてないです)

使っていて思うこと

このテスト(というかチェック?)のしかたは AtCoder や Codeforces で使えるんですが TopCoder の形式には使えませんでした。

サンプルケースのコピペは面倒です。なので bookmarklet で問題ごとには一回で済ませられるようにしてます。
atcoder で使っているのはこれです。

javascript:var codes = [].map.call(document.querySelectorAll(".div-sample-copy"), function (e) { return e.nextSibling.innerHTML });var n = 2;var len = Math.round(codes.length/n,10);var ret = [];for(var i=0;i<len/2;i++){    ret.push( codes.slice( i*n, i*n+n ));}var text = ret.map(function (e) { return e.join("----\n"); }).join("====\n");document.write('<pre>' + text + '</pre>');

その他

私は Mac 環境を使っていて、競技プログラミングを C++ で書き始めたのは最近です。C++ (競技プログラミング)のデバッグ方法、作業環境はまだ考え中です。
いいプラグインがあるエディタやツールがあれば教えていただきたいですm(_ _)m。