No Such Blog or Diary
Template でPermutation前計算
順列を生成して出力するプログラムをかんがえる.んで,コンパイル時に順列を全生成して,その結果のみを出力するプログラムが最速である.なので,Template で順列を全生成して出力するプログラムを作ってみた.
とりあえず,ソースジェネレータと作られたソースをおいてみる… コンパイルが激遅い… ちなみに,生成された 3 の permutation のコードはこんなもん.
#include <iostream>
using namespace std;
template<int n, int x0, int x1, int x2>
struct Perms{ inline static void calc(){}
};
template<int x0, int x1, int x2>
struct Perms<0, x0, x1, x2>{
inline static void calc(){
Perms<1, x0, x1, x2>::calc();
Perms<1, x1, x0, x2>::calc();
Perms<1, x2, x1, x0>::calc();
}
};
template<int x0, int x1, int x2>
struct Perms<1, x0, x1, x2>{
inline static void calc(){
Perms<2, x0, x1, x2>::calc();
Perms<2, x0, x2, x1>::calc();
}
};
template<int x0, int x1, int x2>
struct Perms<2, x0, x1, x2>{
inline static void calc(){
Perms<3, x0, x1, x2>::calc();
}
};
template<int x0, int x1, int x2>
struct Perms<3, x0, x1, x2>{
inline static void calc(){
cout << x0 << x1 << x2<<endl;
}
};
int main(int argc, char *argv[])
{
cout << hex;
Perms< 0, 0, 1, 2>::calc();
}
- Comments: 0
- TrackBack (Close): -
Template で条件分岐
Template でプログラム中の条件分岐を全てやってしまうことはできないだろうか? 最近こんなことを考えていたのだが,if 文だけなら何とかなるなぁと思ってみた.各処理ブロックをTemplate にして,必要な変数を全て Template 引数にして,条件分岐に Selector を使って条件に応じて適した Template クラスの calc() メソッドを呼ばせると.このとき,else 節がいらない場合には, Nothing という何もしない Template を使うと.たとえば,x が y より小さいときだけ出力する場合には,こんなかたちでできるはず.
template <bool judge, typename T, typename F>
struct Selector{ typedef T val; };
template <typename T, typename F>
struct Selector<false, T, F>{ typedef F val; };
struct Nothing{ inline static void calc(){}};
template<unsigned int x, unsigned int y>
struct Printer{
inline static void calc(){
cout << x << " < " << y << endl;
}
};
template<unsigned int x, unsigned int y>
struct MinThenPrint<x, y >{
inline static void calc(){
Selector<(x < y), Printer<x,y>,Nothing>::val::calc();
}
};
- Comments: 0
- TrackBack (Close): -
XHTML のContentType を正す
- 2005-07-07 (Thu)
- ソフトウェア
XHTML の拡張子を .html にしておいたら,サーバが text/html の type を返していた.これだと Another HTML-lint gateway で点が悪くなってしまうので .htaccess でローカルに指定を追加.これで 100点になった.めでたし.ついでに Content Negotiation で英語と日本語のページを自動で切り替えるように指定追加.でも httpd.conf で Options の上書きが禁止されてるので意味が無い…
AddType "application/xhtml+xml; charset=UTF-8" .html AddLanguage jp .jp AddLanguage en .en LanguagePriority jp en Options +MultiViews
- Comments: 0
- TrackBack (Close): -
TeX で書いた式を画像に落とす
TexPoint でやっていることをスクリプトにまとめてみた.tex2img.tex で画像に落としたい式とかを書いて下のスクリプトを実行するれば,tex -> dvi -> ps -> bmp(png) と画像が出来上がるという仕組み.pLaTeX, Ghostscript が必要になる.
#!/bin/bash
BASE="tex2img"
TEXFILE="$BASE.tex"
DVIFILE="$BASE.dvi"
PSFILE="$BASE.ps"
BBFILE="$BASE.bb"
RES="1200"
#DEVICE="pngmono"
#OUTFILE="$BASE.png"
DEVICE="bmpmono"
OUTFILE="$BASE.bmp"
TEXCOM="platex $TEXFILE"
PSCOM="dvipsk -D $RES -E -o $PSFILE $DVIFILE"
BBCOM="gswin32c -q -dNOPAUSE -dBATCH -sDEVICE=bbox $PSFILE"
echo "Running $TEXCOM"
$TEXCOM
echo "Running $PSCOM"
$PSCOM
echo "Running $BBCOM"
$BBCOM > $BBFILE 2>&1
BB=`cat $BBFILE | grep '%%BoundingBox:'`
echo "Found bounding box $BB"
BX=`echo $BB | awk '//{print $2}'`
BY=`echo $BB | awk '//{print $3}'`
BX2=`echo $BB | awk '//{print $4}'`
BY2=`echo $BB | awk '//{print $5}'`
X=`expr $BX2 '-' $BX`
X=`expr $X '*' 300`
X=`expr $X '/' 18`
Y=`expr $BY2 '-' $BY`
Y=`expr $Y '*' 300`
Y=`expr $Y '/' 18`
IMGCOM="gswin32c -q -dNOPAUSE -dBATCH -sDEVICE=$DEVICE -r$RES -sOutputFile=$OUTFILE -g${X}x${Y} -c -$BX -$BY translate -q $PSFILE"
echo "Running $IMGCOM"
$IMGCOM
ファイルにして置いておこう.
- Comments: 0
- TrackBack (Close): -
screen をもう一度
- 2005-07-05 (Tue)
- ソフトウェア ( Linux/coLinux )
すぐ忘れるので screen の使いそうなコマンドまとめ.コマンドは ^A のあとに
? ヘルプ表示 ^C or c 新しいスクリーン作成 ^N or n 次のスクリーンへ移動 ^P or p 前のスクリーンへ移動 ^A or sp 前回作業したスクリーンへ移動 0 ~ 9 スクリーン番号 0 ~ 9 へ移動 " スクリーンを選択して移動 ^W or w スクリーン一覧 S フレーム分割 ^I or tab 次のフレームへ移動 X 今のフレーム削除 Q 今のフレーム以外を削除 [ コピー ] ペースト d デタッチ(screen -r で復帰)
いいかげん覚えたいなぁ.
- Comments: 0
- TrackBack (Close): -
発表時間考えろよな
- 2005-07-04 (Mon)
- 一般
講義が輪講形式で一回に複数人が担当して論文を読む.今日の担当者は私を含めて5人で,私は最後を担当する予定だった.しかし,担当の論文は少々数学的にとっつきにくい内容だったため,前半の人間の発表が持ち時間の倍以上(30分超え)になったり.んで,一人前がもう時間が無いにもかかわらずたらたらたらたら...... 時間がねーんだからさっさとしゃべれ! 本質的でない部分は飛ばして説明しろ! だいたいにしてPCがプロジェクタに正常につながるかどうかを先にチェックしとけ! (ここで正常につながっていたらその5分間に私の発表を終えられた) 結局時間切れとなり,彼らのおかげで私の発表は来週に持ち越されることに.来週の頭に私が発表しても誰も先週のことは覚えているわけが無い.最後の結論部分だけを来週に回してもまったく持って無意味な発表にしかならない.
これまでの他人の発表を見ていれば時間が厳しくなることは分かっていたのだから,発表時間を考えてスライド作って発表時間もある程度フレキシブルにするべきだ.もうちょっと頭使おうよ.まったく.
- Comments: 0
- TrackBack (Close): -