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ももらえませんからね。