2013/11/16(Sat)問:加算の超最適化を実装せよ
http://codegolf.stackexchange.com/questions/12664/implement-superoptimizer-for-addition
今Y個の0/1の2値のいずれかを取る変数x[0]...x[Y-1]がある。
こいつらの和がXになるかどうか を判定する論理式を作るプログラムを作る。
論理式には括弧 と and or not が利用できる。
論理式のスコアは、x[?]が評価された回数で定まる。
F(Y = 2, X = 1) := (x[0] & !x[1]) | (!x[0] & x[1]) ならば スコア は 4。
入力 Y,X に対して最もスコアが低くなるような論理式を生成して返すプログラムを書け。
2013/11/07(Thr)C# on Windows でMP3をデコードする
Windowsには昔からAudioCodecManagerという音声形式を色々扱える系のAPI群があるので、
それをP/InvokeでC#から呼び出してMP3をデコードすることができる。
Windows 95の頃には既に存在した古のAPIであるが、
Windowsの機能を使うので、ライセンス的にも特に怖くないし、
対象プラットフォームがWindowsで、かつ目的がMP3の仕組みを勉強するのでなければ、
これでいいよね。
https://github.com/ttsuki/ttsuki/blob/master/WinMM/AcmMp3Decoder.cs
2013/11/04(Mon)template <class T> struct Hoge { }; の T を POD に制約したい
タイトルの通り、template
というわけで、 Hoge
コンパイルエラーを生成できるような、PRECONDITIONAL_ERROR なるものを作ってみた。
STATIC_ASSERTの親戚のような感じで使えるかなー。
今回作ってみたのは、template実体化時にTがPODじゃないとコンパイルエラー。
ついでに、引数に渡された配列の長さがある一定以上ないとコンパイルエラー。
自作コンテナを作るとき、TがPODならコンストラクタもデストラクタも呼ばなくてよいので、
コンテナを clear するときも、for (int i = 0; i < size(); i++) this[i]->~T(); する必要が無いっていう。
以下 gist
2013/11/04(Mon)C++98 C++03 の POD
独自コンテナ template
メンバ追加時にコンストラクタもデストラクタも呼ばなくてよい。
コンテナを clear するときも、for (int i = 0; i < size(); i++) this[i]->~T(); する必要が無い。
では、型をPODとして定義するにはどうすればいいのかという話だ。
C++11の情報ばかりヒットして、
C++03までのPODについて、いまいちまとまった情報が得られないので、
自分なりに調べた情報をまとめておく。