ICFPの古文書にトライ
http://www.kmonos.net/wlog/63.html#_0214060725 経由で既にコンテストは終わってるけど、http://icfpcontest.org/task.shtml に挑戦してみました。
A collection of arrays of platters, each referenced by a distinct 32-bit identifier.
と書かれていて、
std::map<boost::uint_fast32_t,std::vector<boost::uint_fast32_t> > collection;
なんて、コードを書いてしまう自分は駄目ですねぇ。すぐに、
std::vector<std::vector<boost::uint_fast32_t> > collection;
と修正したのですが、SANDmark中にstd::bad_alloc例外が発生してしまいました。
さすがにメモリ無駄遣いしすぎかと思い、メモリを使い捨てにするインチキ実装をやめて、少しガベコレを追加してようやく動きました。
でも、SANDmarkに50分もかかるわけです。
ここに来てようやく、Allocation/Abandonmentってmalloc/freeでいいじゃん(32bitOS限定だけど)と気が付きました。バカですね。
例外のコストもバカにならんと思って、ほぼCなコードに書き換え、例外オフでコンパイルしてみましたが、それでも40分かかります。
と、ここまでは昨日のお話。一晩明けて説明を読み直してみると、原因が分かりました。
最初からずっと仮想マシンの上で仮想マシン(um.um)を動かしてました!
そのまま実行すれば、数分で終わるじゃないですか、、、。駄目だ、こりゃ。
ちなみに、コンテストは終わってますがRegistも可能なようです。
Registしないと、decryption keyももらえませんからね。