No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 1317 | 1318 | 1319 |...| 1351 | 1352 | 1353 || Next»

screen をもう一度

すぐ忘れるので 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 で復帰)

いいかげん覚えたいなぁ.

発表時間考えろよな

講義が輪講形式で一回に複数人が担当して論文を読む.今日の担当者は私を含めて5人で,私は最後を担当する予定だった.しかし,担当の論文は少々数学的にとっつきにくい内容だったため,前半の人間の発表が持ち時間の倍以上(30分超え)になったり.んで,一人前がもう時間が無いにもかかわらずたらたらたらたら...... 時間がねーんだからさっさとしゃべれ! 本質的でない部分は飛ばして説明しろ! だいたいにしてPCがプロジェクタに正常につながるかどうかを先にチェックしとけ! (ここで正常につながっていたらその5分間に私の発表を終えられた) 結局時間切れとなり,彼らのおかげで私の発表は来週に持ち越されることに.来週の頭に私が発表しても誰も先週のことは覚えているわけが無い.最後の結論部分だけを来週に回してもまったく持って無意味な発表にしかならない.

これまでの他人の発表を見ていれば時間が厳しくなることは分かっていたのだから,発表時間を考えてスライド作って発表時間もある程度フレキシブルにするべきだ.もうちょっと頭使おうよ.まったく.

Webカメラ

なんとなく Web カメラを購入してパソコンにつけてみた.MSN Messenger とか文字で説明できないことが説明できるのはありがたい.とりあえず,これに玄箱とかくっつけて監視カメラにして遊んでみようかなぁ.

テンプレート版の if

テンプレートでプログラムするための部品として if に相当する Select なるものがある.これを使うと then 節と else 節の一方のみの評価ができるので安全.ためしに Collatz 予想のやつで遊んでみた.

template<bool, typename T, typename F>
struct Select{
    typedef T val;
};
template<typename T, typename F>
struct Select<false, T, F>{
    typedef F val;
};
template <int n>
struct Collatz {
    const static int val = Select<(n&1)==0, Collatz<n/2>, Collatz<3*n+1> >::val::val + 1;
};
template <>
struct Collatz<1> {
    const static int val = 0;
};
int main(int argc, char *argv[])
{
    cout << Collatz<3>::val << endl;
    return 0;
}

ICPC本番

本日は ICPC 国内予選本番だった.今年は6問全てが解くことのできる問題だったので,6問解けば確実の5問を早く解いたものの勝ちと予想された.結果としてはほぼ予想通りで,6問解いたのが1位で5問を解いたのが残りの二枠を埋めた.うちらのチームは最大で4問しかといてなかったので,打ち上げは残念会に.しかし,B3チームがかなり優秀だと分かったので来年こそは通過してもらいたいなぁ.

テンプレートで

覆面算の計算で各桁をテンプレートで生成してやることにした.これでソースは見やすくなった.しかも,全部を展開してあった前のコードより若干速いらしい.ちなみに,関数テンプレートの部分特化(Partial Specialization)は禁止されているようなので,部分的にインスタンス化するため仕方なくクラスを使う羽目になった.ま,次は答えをテンプレートで生成だな.

#include <iostream>
using namespace std;
template<const int m, const int l>
class Calc{
public:
    inline void calc(unsigned int &x, unsigned int &y, unsigned int (&digits)[m])
    {
        const int n = m/4*3 - l*3;
        unsigned int d0 = digits[n];
        for(int i0 = n; i0 < m; i0++){
            digits[n] = digits[i0];
            digits[i0] = d0;
            x = (digits[n]<<(4*(n/3))) | (x&((1<<(4*(n/3)))-1));
            unsigned int d1 = digits[n+1];
            for(int j0 = n+1; j0 < m; j0++){
                digits[n+1] = digits[j0];
                digits[j0] = d1;
                y = (digits[n+1]<<(4*(n/3))) | (y&((1<<(4*(n/3)))-1));
                if(n==0 && y >= x) {            // omit symmetric pattern
                    digits[j0] = digits[n+1];
                    continue;
                }
                unsigned int z1 = ((x * y) >> (4*(n/3)))& 0xf;
                int k1 = n+2;
                for(; k1 < m; k1++) if (digits[k1]==z1) break;
                if(k1 >= m) {
                    digits[j0] = digits[n+1];
                    continue;
                }
                digits[k1] = digits[n+2];
                digits[n+2] = z1;
                Calc<m,l-1>().calc(x, y, digits);
                digits[n+2] = digits[k1];
                digits[k1] = z1;
                digits[j0] = digits[n+1];
            }
            digits[n+1] = d1;
            digits[i0] = digits[n];
        }
        x &=((1<<(4*(n/3)))-1);
        digits[n] = d0;
    }
};
template<const int m>
class Calc<m,0>{
public:
    inline void calc(unsigned int &x, unsigned int &y, unsigned int (&digits)[m])
    {
        const int n = m/4*3;
        unsigned int z4 = ((x * y) >> (4*(n/3)));
        unsigned int ds[m-n];
        for(int i = 0; i < (m-n); i++){
            ds[i] = digits[i+n];
        }
        int i = 0;
        for(; i < m-n; i++){
            int k4 = i;
            unsigned int z5 = z4&0xf;
            z4>>=4;
            for(; k4 < m-n; k4++) if (ds[k4]==z5) break;
            if(k4 >= m-n) break;
            ds[k4] = ds[i];
        }
        if(i >=m-n && ds[m-n-1]!=0){
            cout << x << " * " << y << " = " << x*y << endl;
            cout << y << " * " << x << " = " << x*y << endl;
        }
    }
};
int main(int argc, char *argv[])
{
    const int m = 16;
    cout << hex;
    unsigned int digits[m];
    for(int i = 0; i < m; i++){
        digits[i] = i;
    }
    unsigned int x = 0;
    unsigned int y = 0;
    Calc<m,m/4>().calc(x,y,digits);
    return 0;
}
«Prev || 1 | 2 | 3 |...| 1317 | 1318 | 1319 |...| 1351 | 1352 | 1353 || Next»
Search
Feeds

Page Top