Yearly Archives: 2010

2010-10-18

めちゃモテ新OP

今期の「おしゃれ マイドリーム」は気に入ったかも。めちゃモテのOPは毎期いい曲多いと思うんだけど、何かどこか気に入らない部分があって買ってこなかった。今回は全体的に気持ちいいし嫌なところもないので良い。

2010-10-15

矩形データ構造

いくつかの環境でプログラミングをしていると、単純な(二次元直交座標系上の各辺が座標軸に沿った)矩形を表すのにいくつかの異なった方法があることに気がつく。

たとえばWin32のRECT構造体は左、上、右、下の各座標値を保持する。これは矩形の対角線の端点座標を保持している(左上の点と右下の点、あるいは、右上の点と左下の点を保持している)と解釈しても良いし、各座標軸における範囲(下限値と上限値)を保持していると解釈しても良い。

一方Java AWTのRectangleクラスは左、上の座標値と幅、高さを保持する。

他にも、位置の表現方法と大きさの表現方法を工夫すれば無限に考え出すことができる。中でも中心座標と幅高さ(または半径)を保持するような構造はポピュラーな方だろうか。

矩形を表現する構造は何もコンパクトでなくてもよい。矩形はある種の点の集まりなのだから、代表的な点を可変個数保持するような構造も考えられる。この構造は矩形のしめる範囲だけを表すのには無駄が多いが、個々の点が最終的に矩形の構成要素としての意味を持つのであれば、矩形を表現する構造と言える。ただ、「矩形のしめる範囲」以外の情報も多分に含んでいるので、今回の話からはやや外れる存在かもしれない。

幾何学上の性質を元に考えれば、矩形の占める範囲は最低四つの数があれば表現でき、それらをどのように組み合わせて矩形を表現しても同じことになる。

このように一見同じものを表現するにも色々と方法があるわけだが、コンピュータの数値上で扱うには色々と細かい点で違いが出てくる。

面倒なので詳しくは書かないけれど、派生属性の計算コストとか値域とか精度とかそういった色々な都合で最適な構造は変わってくるので、どれか一つに統一というわけにもいかない。煩わしい。unionやintersectionの計算は左右上下構造の方が分かりやすいと思う。でも左右上下構造は特に浮動小数点数の場合平行移動しただけでサイズが変わるという問題があったり。

ちなみに、上では左、上、幅、高さ等という語を断り無く使っているが、これらの語は座標の取り方に依存するので誤解が生じる場合もある。厳密には第一軸(X軸)負方向端、第一軸に沿ったサイズ、などと表現した方が良いかもしれない。

2010-09-22

Pobs(Android上のゲーム)

最近Pobsをプレイしています。六角マス盤上の陣取りゲーム。

できるのは自分の駒を隣接マスへ複製する(増やす)か二つ先へ(一つ飛ばしで)ジャンプするかの二つだけ。もし移動先(または複製先)の隣に敵の駒があれば、その駒はこちらの色に変わります。このような操作を一手ずつ交互に行っていき、最後に駒が多い方が勝ち。

基本は一手でできるだけ多くの駒を取れるような操作をすること。相手の駒で埋まっているところに一つだけ穴が開いている場合、そこへ飛び込めれば最大六つの駒を自分の色にできます。

ただ、そのような「穴」に飛び込む場合、隣接複製では入れないので一つ飛ばしのジャンプを使うことになるのですが、そうすると当然駒が元々いた場所には穴ができてしまいます。着手後、もし敵がその穴に移動できる場合、こちらは(奪った六つの内)最低 三つ 二つの駒を失う可能性ができるわけです。

だから常に出入りで考える必要があります。自分がこう動かしたらN個取れるけど相手にM個とられる手が生じてしまうからN-M個の価値。自分がこう動かしたら一個も取れないけど相手がM個取る手を防げるからM個の価値。というような。

このような感覚は囲碁にとても近いと思いますが、囲碁よりも一手の選択肢が少ないので考えやすくなっています。

2010-09-21

Emacsの環境整備

結局未だにMeadow3のままでEmacs23.2に移行していませんが、移行しやすくするために環境を整備しました。

.emacsの類は ~/emacs/config/ に置き、従来site-lispに置いていたものは ~/emacs/lisp/ へ置くようにし、~/emacsをgitで共有するようにしました。.elcはMeadow3とNTEmacs23.2の間で互換性があるのか分からなかったので共有せず、チェックアウト先個別で(byte-recompile-directory "~/emacs/lisp/" 0)するようにしました。

.emacs-meadow.elの設定の内、プラットフォームに依存していないものはできるだけ.emacs-common.elへ移したり。apelやflim、semi、wlはMeadow3のインストーラで入れていたのですが、それも~/emacs/lispへ手動で入れ直したり。