2009-01-01から1年間の記事一覧
目の前の――あるいは長期にわたる経験から学ばない指揮官は、無駄な死がいずれは勝利につながるとでもいうように、やみくもに戦力を投入しつづけるのです はからずしも望まぬ司令官になってしまった主人公の話「彷徨える艦隊」の第2巻での、その主人公のセリ…
周回遅れでiBookにLeopardを入れました。本当はこの秋にでるSnow Leopardまでいまの環境で引っ張りつもりだったんですが、Snow LeopardがPowerPCをサポートしないと知り(手持ちのiBookはPowerPCマシン)、観念してLeopardを購入。丸一日かけてLeopardの環境に…
少し整理。あとポインタだけでなく、イテレータ(ランダムアクセスイテレータ)でも使えるように記述を少し変更。 template<typename T> void swap(T& lhs, T& rhs) { T temp(lhs); lhs = rhs; rhs = temp; } template<typename iterator_t> void qsort(iterator_t begin, iterator_t end) { if(</typename></typename>…
でも、釈然としないのはなぜだろう? template<typename T> void swap(T* lhs, T* rhs) { T temp = *lhs; *lhs = *rhs; *rhs = temp; } template<typename T> void qsort(T* begin, T* end) { if((end - begin) <= 1) return; T* left = begin; T* right = end - 1; T pivot = *right;</typename></typename>…
わけあって、ソートのプログラムを書こうとしたんですが。 あれ、C/C++でどうやって実装するんだっけ?こことか読んで、勉強のしなおしが必要です。 Haskellならやりたいことをそのまま書き連ねるだけなので楽でいいのに…。 qsort [] = [] qsort (a:as) = (qs…
このところ、他のチームのソースコードを入手して、時間があるときに眺めているのですが。「ここのチームのコードはきれいだっ」というのにお目にかかれず。どちらかというと、「なんだこれは?」というコードを目にすることもすくなくなく。だからといって自…
http://d.hatena.ne.jp/makiyamakoji/20090512/p1のコードを参考に(というか、ほとんど一緒ですが)C++で書き直してみた。 #include <algorithm> #include <stdexcept> #include <cmath> double calcNormalDistPercentile(double percent) { if((percent <= 0) || (1 <= percent)) { throw </cmath></stdexcept></algorithm>…
このあいだ、仕事場の電話を取ったら英語で話しかけられました。相手がゆっくりと簡単な言い回しをしてくれたのと多少なりとも英語番組を聴いたりしていたおかげか、聞き取りにはなんの問題もなかったんですが…。如何せん言葉が出てこない。言っていることは…
// 演算子を定義する部分 template<typename T, typename U> struct Operator { explicit Operator(const T& lhs) : lhs(lhs) {} const T& lhs; }; template<typename T, typename U> inline Operator<T, U> operator % (const T& lhs, U) { return Operator<T, U>(lhs); } enum ISINCLUDEDIN { isIncludedIn }; template</t,></t,></typename></typename>
…のサンプル。 GitHub - mattsan/MessagingSample メッセージオブジェクトを作るのにmapで生成関数を選択しているのにちょっとコストがかかる。実行時に初期化してるし。 メッセージの数や種類がプログラムの動作中に変化することは少ないので、これをローコ…
このあいだのエントリでも書いたように、雇用について関心が高まっている今日この頃。あっ、と気付いたのがG.W.ワインバーグの著書「コンサルタントの道具箱」で契約期間について書かれた一節。 「適切な契約期間は?」という節で、契約は短期にしなさい、依…
任意のコンテナに対してdiffをとれるようにテンプレートにしました。 ポイントはテンプレートになっているのが、diffの入り口Diff::ond関数だけというところです。このためdiffを求めるプログラムの大半をバイナリとしてライブラリ化することもできます。ま…
経路を記憶するしくみを追加し、実際に文字列を比較してみます。 コードの様子が変わったように見えるかもしれませんが、やっていることの実質はおなじです。 メンバのtree_に編集の操作(delete/common/add)がツリーとして記録されます。diffの最後で見つか…
「O(ND)」というのは、この手続きにかかる計算量のことですが、それがそのままアルゴリズムのことをさす言葉になっているようです。 詳しい解説はこのページなどをみてもらうとして、ともかく実装。 #include <string> #include <vector> #include <stdexcept> int snake(int x, int y, </stdexcept></vector></string>…
diffをつくる(2)で掲載したコードは文字列を比較するコードですが、std::stringを他のコンテナに替えればそのコンテナどうしのdiffがとれます。 任意のコンテナのdiffをとれるようにテンプレートにしたものを掲載。この例ではstd::stringのdiffとstd::vector…
昨日のコードでつくったグラフをもとに、SES(Shortest Edit Script)を見つけるコードを追加しました。体裁が変わったように見えますが、makeGraphまでは基本的に昨日と同じコードです。 今日のキモはfindSESのコード。もっとも少ない手順で一方の文字列から…
わけあって、diffを自作中。で、いろいろネット上で情報を集めている最中。 検索をかけてみるとこのページがあちこちからリンクされていたので、読んでいるんですが…後半部分がまだよくわかりません。 仕方がないので、理解したところまでコードに変換してい…
タイトルがよくないと思う。前著にあやかってタイトルが決められたんだと思うんですが、内容とあってないような気がします。個人的な話ですがそのタイトルから敬遠していた部分があります。最近になって著者のブログなどを拝見するうちに興味がわいて読んで…
バージョン管理には久しくSubversionを使っていて、その後分散バージョン管理が便利そうだとMercurialを使いはじめました。 さらにその後、Gitもわりと使われていることを知り、少なくとも使えるようにしておこうと一通り使い方を調べてみたんですが…git-pus…
以前、部屋の片付けをしたときにどこかの箱に放り込んでそのまま行方不明になっていた「数学ガール」を、今日ようやく発掘しました。これでコミックス上巻を読んでから気になっていた気になっていたことが解消。 なにが気になっていたかというと、ミルカさん…
無気力の心理学―やりがいの条件 (中公新書 (599))作者: 波多野誼余夫,稲垣佳世子出版社/メーカー: 中央公論新社発売日: 1981/01/22メディア: 新書購入: 3人 クリック: 52回この商品を含むブログ (35件) を見る 最近読んだ本。 効力感というのは、おおざっぱ…
ちょっと古いニュースですが、先ほど初めて目にしたので。 ケータイ「契約」実績で「特別採用」 学生から不満と批判の声 : J-CASTニュース 最初、リンクされていたブログの記事などで概要を目にしたときは「そんな乱暴な話があるのか」と思ったんですが、今…
文字列(二重引用符で囲まれた文字列)と整数値を識別するようにしました。 パースに失敗した時にgotoで後始末に跳ぶようになっています。この部分、当初は例外で実装しようとしたんですがパースエラーは例外じゃないだろう、ということで書き直し。いろいろ言…
無駄にでかくなってしまいました。 半端ですがさらしておきます。できること: S式をパースしてオブジェクトにします。オブジェクトは出力できます。 (,),.,空白以外は全部識別しに使える文字扱いです。引用符とか関係ありません。
このリリースで注目すべき点は、彼らがJASRAC登録を回避したことだった。業界の常識では、メジャーの流通に乗せるなら著作権登録は当たり前なわけだが、彼らはその常識には従わなかったわけだ。そうした理由は簡単で、ユーザーの二次利用を妨げないためだ。…
UMTP認定試験去年のLevel1 Test1に続き、Level1 Test2を受けてきました。今回受験するにあたって要項をよく読んでみると、Test2が合格すればLevel1認定されるとのこと。ってことは、去年のTest1の受験は意味なかったのかと思えてくるけれど、おかげで弱点わ…
おとといのエントリで書いた演算子を、汎用的に使えるようにしてみました。 // Operators.h #ifndef OPERATORS_H #define OPERATORS_H template<typename T, typename U> struct Operator { explicit Operator(const T& lhs) : lhs(lhs) {} const T& lhs; }; template<typename T, typename U> inline Operator<T, U></t,></typename></typename>…
#include <iostream> // 例:三次元ベクトルクラス class Vec3 { public: explicit Vec3(double x = 0, double y = 0, double z = 0) : x_(x), y_(y), z_(z) {} double x() const { return x_; } double y() const { return y_; } double z() const { return z_; } Vec3</iostream>…
array.operator[](i); foo.operator=(bar); 普通より難しいことしていると思う…。 どうやってoperator overrideを学んだんだろう…註:「こんなことができるんだ」というのではなくて、「なんでわざわざ面倒な書き方してるんだ」という驚愕です。念のため
// Foo.h #ifndef FOO_H #define FOO_H typedef struct foo_tag { int hoge; #if defined(USE_FUGA) int fuga; #endif int uhyo; } Foo; #endif//FOO_H // IncUhyo.cpp #include "Foo.h" void incUhyo(Foo* foo) { ++foo->uhyo; } // Main.cpp #include <stdio.h> #in</stdio.h>…