Home > Archives > 2005年05月

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 をリターンしているのが鍵ですな.

久々のICPCプログラミング

そろそろみんなでACM/ICPCの練習会をしましょうということで,輪講の資料がやばいにもかかわらず数時間プログラム作成で現実逃避.とりあえず慣らしのために簡単なDPとして 会津国内予選のC を組むことに.今年の参加資格のない人間が3人と参加できる人が3人でやっていたのだが,参加資格のない人間のほうが早い...(私は15分弱) こんなんでいいのだろうか? まあ,これから練習してなれてくれば大丈夫でしょうけど.さて,来週はもう少し人数を増やしてがんばろう.

CRCをテキストに埋め込むプログラム

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 だったり... とにかくすげぇなぁ.

Home > Archives > 2005年05月

Search
Feeds

Page Top