2005年05月
Java の無名クラス
無名クラスの中で無名クラスを使いつつ,初期化用のメソッドまで呼んでいる分かりにくいコードを書いてみた.
xpane.add(delTabButton = new JButton(){ // "Del Tab" ボタン JButton init(){ setText("Del Tab"); addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ delTab(); } }); return this; } }.init());
init() が this をリターンしているのが鍵ですな.
- Comments: 0
- TrackBack (Close): -
CRCをテキストに埋め込むプログラム
- 2005-05-01 (Sun)
- プログラミング
IOCCC2004 のプログラムを眺めていたら omoikane.c なるファイルを発見(omoikaneはハンドルネームらしい).名前がいい感じなのでソースを見てみる.なにやら何かのキャラクターのAAになってるらしい.よく見てみると "Moekan" "kero Q" なる文字が... 説明テキストを読むと "Rinia is a tool for embedding CRCs in text files." だし... ということで,もえカンのリニアを模しているらしいが,作者のコメントどおりあまり良く分からない.
それはさておき,プログラムの動作自体はとても面白い.テキストファイルとかを読み込んで,CRCをそのテキストの中に埋め込むらしい.もちろん,そのCRCは「埋め込まれたCRCの文字列を含んたファイルのCRC」である.まあ,CRCを埋め込むファイル全体のCRCが変わるわけで,簡単に埋め込めないことは容易に理解できる.仕組みとしては,入力でCRCを埋め込む場所とCRC調整のために使える置換してもいい部分を用意してもらう.そんで,現在時刻を使って最後の置換可能文字(もしくはCRC埋め込み位置)までのCRCを決めちゃって,それを種にしてその後ろのCRCを計算してそれをファイルに埋め込む.あとは,がんばってその適当に決めてしまったCRCを達成するように置換文字を全パタン試す.うまくCRCを調整できたらおわり.まあ,それ以外のやり方が無いよねと思う.
ところで,IOCCCに出されるだけあってソースは読みにくい.3項演算子が大量に使われているのが主な原因.でも根気で読んでみると結構知らなかった書き方などを学べて勉強になる.この作者は他にもいろいろやっているようで,ホームページを見てみるとかなり面白い.どうやらソフト屋さんのようでACM/ICPCで World Final にいってたり ICFP のプロコンにでたりもしたらしい.Development Tools に vim はあっても emacs が無いあたりもすばらしい.なにより,日本人じゃないだろうにドメインが uguu.org だったり... とにかくすげぇなぁ.
- Comments: 0
- TrackBack (Close): -