2014年10月12日日曜日

Greedのカスタマイズ

TopCoderのArena用プラグイン「Greed」のカスタマイズに挑戦。




Greedは高機能なので、ほとんど何の設定をしなくても、Arena参戦するのに困る事は無い。
しかし、他のSRM参加者のソースを見ていると、ソースの初めに

#define REP(i, N) for (int i = 0; i < (int)N; i++)

とか書かれていたりする。
これが、なんか出来る人っぽくてカッコいいので自分でも使ってみたくなった。というより、きっと、こういうのは定番なので、ちゃんと技術を盗んでいかねばならないのだ!!


greed.confファイルの作成


Greedの導入時の唯一の設定項目は、workspaceディレクトリを設定することだった。
Greedの設定は、その指定したworkspaceディレクトリ内にgreed.confというファイルを作って行うことになる。なので、とりあえず、空のgreed.confを用意する。


カスタマイズ用のテンプレートファイルの作成

greed.confの次に、テンプレートファイルと呼ばれるファイルを用意する。

Greedは、アリーナから問題を開くことで、ローカルにソースやテストケースのファイルを作成してくれるが、この作成されるファイルのひな形をテンプレートファイルという。

そこで、デフォルトのテンプレートファイルに代えて、自分の好きなテンプレートファイルを作り、そのファイルをテンプレートファイルとして使いますよということをgreed.confで設定してあげれば目的が達成できるようだ。

まず、デフォルトのテンプレートファイル(C++用)の内容は以下の通り。

https://github.com/shivawu/topcoder-greed/blob/master/src/main/resources/templates/source/cpp.tmpl


このファイルをダウンロードして、「my_template.cpp」というファイル名にし、workspaceディレクトリに置く。このmy_template.cppを好きに書き換えることで、カスタマイズをする。


カスタマイズ用のテンプレートファイルとして指定する


先に述べた通り、カスタマイズ用のテンプレートを使うように設定するにはgreed.confに次の一行を書き込む。

greed.language.cpp.templateDef.source.templateFile = my_template.cpp

ここまでで、デフォルトと同じ状態のソースコードが生成される。


C++のマクロ


テンプレートファイルでは、${と}で囲まれた部分が、テンプレートエンジンによって置き換えが行われる部分で、それ以外の部分は、書いたらそのまま出力される。

なので、あまり難しく考えなくても、C++用のマクロは、テンプレートファイル前半部分にべた書きしておけばOK!


以前に紹介した、greedの設定を紹介してくれている人のページを参考にすると、インクルードファイルは#include <bits/stdc++.h>することで、必要そうな色々なものを呼び出してくれるらしいので、それにしてみた。

その他、C++の便利なマクロってどんなのがあるのかな?と思って検索してみると

TopCoderから学ぶ美しいマクロや型宣言 C++

というのが、みつかった。
そこで、初心者でもよく使いそうな奴だけ抜き出して整理してみた。



もっと使いこなせるようになったら、付け足していけば良いのかなと思う。

0 件のコメント:

コメントを投稿