Daily Archive for July 13th, 2007

TopCoder::SRM::357

AM 11:15 : Coding Phase 終了。ふー。

EASY

std::find_if にもう1つ引数を渡したくて、 std::bind1st の使ってみようとしたのですが、うまくいかず。調べるのに5分くらいのロス。 しかたなくべたにforループを書いてsubmit。203.38ptsでした。

MEDIUM

ナップザック問題そのままか! と、最近習いはじめたDPをつかって解いてみました。 DPの実装を思い出しながらなんとか書いたのですが、テストケースにひっかかり単純なナップザック問題ではなかったことに気づいて、ちょこちょこ修正してsubmit。235.78ptsでした。

HARD

ページランクもどきの実装でおもしろそう。方針が解りそうなところで時間切れ。


いまChallenge Phaseが始まったのですが、そろそろ出かけないといけない時間なのでここで戦線離脱です。帰ったときに、System Test で fail してなければいいのだけれど。

google-gflags

Google Japan BLog : Google が公開しているソフトウェアの解説 ( その 1 )という記事を読んで。

google-gflags は、getopt(1)と違って、各ライブラリが自分でコマンドライン引数を処理できる。 いちいちmainを書き換えたりしなくてよいので、疎結合が実現できてよさそうです。

僕がよくやるのは、環境変数をセットする方法で、

DEBUG_LEVEL=3
export DEBUG_LEVEL

などとしておいて、

char *dl(getenv("DEBUG_LEVEL"));
int debug_level = (NULL == dl) ?
  DEFAULT_DEBUG_LEVEL :
  atoi(dl);

みたいにします。

Boost.Testのユニットテストフレームワークで、ログのレベルを指定する方法に環境変数が使われており、これを真似しているわけです。

参考 : Boost.Test > Components > The Unit Test Framework > Parameters > Log level


いずれにせよ、他のモジュールに及ぼす影響を最小限にするような設計が心がけとして大切です。 フラグを導入したいから、mainに相当するモジュールにかけあって、Makefileを書き直して、全モジュールをフルビルドして、とかはやりたくないものです。