Derive Your Dreams

21:21 05/09/29

ですのーと

本棚をぼけーっと 見ててふと、写真で左から4冊目の数論入門、訳者名と著者名をあわせて やがみライト だ! と、大発見をした気分になっていました。どうでもいいですね。

20Q

20Q。おお、商品化されるのか。 これは買わねば!

05:31 05/09/29

ICFP Programming Contest

結果でてますね。 combat3位おめでとーございます。

今回のコンテストは二段階制になっていて、『最初の3日間で、 テーマとして与えられたゲーム(マップ上の銀行から金を盗んで逃げる"泥棒"と、 それを捕まえるべく頑張る"警官"の駆け引きゲーム)の2種類のボットを作ってsubmit。 その2週間後にゲームが微妙に拡張されたり仕様変更されたりするので、 1日でボットを作り直して、再submit』というものでした。

もちろん最終的ルールにおいて一番強いボットを作ったとこが優勝なわけですが、 しかし最後の1日で普通にゼロから作っていては時間が足りない。初期ルールを 見た時点でその後の拡張性に優れたボットを作っておいて、ラスト1日でサクっと 対応させることができなくては苦しい。つまり、変更に強いプログラムを高く 評価する…という意図だったんじゃないかと思います。

NaNaIRo

で、私は、とりあえず初期ルールの3日間の分にはsubmitしました(これ)。 そして2週間後、最終日に変更されたルールを見た瞬間に、「なんじゃこれ 変わりすぎ!」 と思ってめんどくなって敵前逃亡。 元々最初に提出したルーチンも特に自信があるわけでもなかったので、 苦労して対応させてもどーせ勝てなさそうだしなぁ、とか。ダメダメです。

…しかしどうも、初期ルールの段階では、半分対戦表を決める乱数のおかげに 見えるが我が NaNaIRo ボット君も健闘していたらしい。 ちなみに名前の由来は 七色亜茶 です。 もうちょい頑張ればよかったのか…?

17:37 05/09/27

Mustang

JDK 6.0 の Snapshot Release を触ってみてます。今回の個人的な注目点はただひとつ、 JSR223: Scripting for the Java Platform。Javaから各種スクリプト言語と連携できるようにするための枠組みだそうな。 一番簡単な例をあげると、

import javax.script.*;

public class Sample
{
  static public void main( String[] arg ) throws Exception
  {
    ScriptEngineManager man = new ScriptEngineManager();
    ScriptEngine        eng = man.getEngineByExtension( "js" );
    eng.eval( "print('Hello, World')" );
  }
}

っていうもの。Javaのオブジェクトをスクリプト内の変数に関連付けたりするやり方も 標準化されていたりします。今のところ標準でJavaScript、オプションでPHPが使えるらしい。 他の言語用のScriptEngineも多分すぐに増えていくんじゃないかと。 Pnuts には既にありますね。

この javax.script それ自体はまあいいとして、注目したいのは 標準でJavaScript、 これ。これはつまり、JDK6をインストールすると同時にJavaScript処理系が入るということに 他ならないわけです。現時点のSnapshotでは、ほぼRhino 1.6相当のものが インストールされている模様(Continuationは動いた。serializeは動かず)。 JDKを入れるだけで、

jrunscript

と打つと、インタラクティブシェルが起動。

js> 1+2
3.0
js> var a = [1,2,3,4]
js> print( a.concat([5,6,7]) )
1,2,3,4,5,6,7

jrunscriptは、他の言語のEngineが登録されていれば、それを指定して動かせる 汎用プログラムになってます。ファイルを読み込ませて動かすのもOK。

Usage: jrunscript [options] [arguments...]

where [options] include:
  -classpath <path>    Specify where to find user class files
  -cp <path>           Specify where to find user class files
  -D<name>=<value>     Set a system property
  -J<flag>             Pass <flag> directly to the runtime system
  -l <language>        Use specified scripting language
  -e <script>          Evaluate given script
  -encoding <encoding> Specify character encoding used by script files
  -f <script file>     Evaluate given script file
  -f -                 Interactive mode, read script from standard input
                       If this is used, this should be the last -f option
  -help                Print this usage message and exit
  -?                   Print this usage message and exit
  -q                   List all scripting engines available and exit

というわけで、JDK6が正式に出たらRhinoの普及度がJavaの普及度にまで 限りなく近づくわけで。わーい。

23:33 05/09/26

5冊

自分も5冊本の話題に 乗っかってみようとしばらく考えてみましたが、どうもあまり思い浮かびません。 エンジニアとして刺激を受けたり、読んで考え方が変わった、という経験をはっきりと 覚えているのは 『Exceptional C++』 だけですね。この本で「例外安全性」という概念を頭に叩き込まれたときに、 プログラムの組み方について脳内パラダイムシフトが起きました。 いつも思うのですが、この本が基本的にC++使いにしか読まれていないのは、 本当にもったいない。第2章だけ取り出してもっと言語非依存な形で整頓できないものかなあ。

…と、話がそれた。他には、名前すら覚えていない、立ち読みで眺めたLispの本。 薄くて小さい本だったように記憶しています。その時はじめてLispプログラムを見て、 なにこのS式ってヤツすげーかっこいいと思って即帰宅してインタプリタの真似事の ようなものを書き始めたくらいの刺激は受けてました。

要するに、「考え方」的な本ってあんまり読まないんだよね、自分。

10/2追記

掲示板にて、件のLisp本は 『リスト遊び』 ではないか?との突っ込みアリ。確かに目次も出版時期も記憶と合致しています。 多分これですね。

04:43 05/09/17

Rebol

YTさんの Rebol企画 がスタート。期待してます。いきなりYTさん節が絶好調。

自分の方の月代わり企画は完璧にフリーズしちゃってますが。 Rebol, Dylan のほかにあの後 触ろうと思ってた言語は、 PiccolaCayenneGikoForth、 辺りでした。最近は更に、あろはさんの影響で ET を使ってみたくなっているところ。 …ちゅーか、これらをどれもまだ使い始めてないということは、自分はこの2年間新しい 言語をひとつも習得してないということで。ダメダメだなぁ。

CD

VOCALIST買いました。 あれ?昨日あった全曲試聴が消えている…。CD屋によったついでに、 この前実家に帰ったときにみたTVのCMで聴いて気に入った曲が入っているらしい Stina Nordenstam という歌手のCDを買おうと思って探したのですが、見当たらなかったので、 近くにあった Stingのベスト盤 を勢いでGet。どういう勢いなのか自分でも疑問です。

シングルで出てる『時代』のカバーもいいなあ。中島みゆきの太いしっかりした声の イメージの曲が、なんともしっとりとした感じに変化していて楽しめました。 そもそもどの歌も元の歌が名曲すぎて、いくら聴いても飽きませんね。

19:07 05/09/14

徳永英明

VOCALIST。しまった今日発売か。忘れてました。

曲リスト見たときは歌い方と合ってない選曲が多そうな…と偉そうなことをちょびっと 思ってしまったですが、試聴してみると、一青窈『ハナミズキ』のカバーが物凄くピッタリで いい感じ。

23:36 05/09/13

A Walk to

Kasumigaura

さっき改めて測りなおしてみたら、 どうも古河より土浦の方が直線距離遠かったっぽいです>関係各氏。

00:36 05/09/10

トーナメントひいき問題

一応、自分が考えてみた内容はというと…

  1. 本質的に違うトーナメント表の正確な総数は見積もるのめんどいけど、 最初に全体を大きく2グループに分けるわけ方だけで (この式のi=0の場合?)、(nCn/2)/2 > 2n/2/2 と、指数の世界へご招待だ。
  2. 総当りの途中でおんなじ形の部分トーナメントを何度も調べることになるのが 明らかに無駄なので、ボトムアップに下から小トーナメントを作っていった方が 効率がいいはず。DPだ。…と、こちらと同じに考えて同じように最悪指数なことに気づく。
  3. 帰着できそうなNP完全問題は 部分グラフ同形判定 かなー、と、そっち方向に考えを伸ばしてみる。総当りのグラフの中に、優勝させたい 人をルートとするトーナメント勝敗木を埋め込めるか否かの判定問題と考えると…。
  4. いやいや、頂点間の対応は固定なんだから部分グラフ同形よりは簡単に違いない。 素直にトップダウンに優勝者をルートとする木を埋め込めるかどうか探索するので 十分だったりしない?優勝させたい人が直接勝てる相手をlog n人選んで、端から 順に再帰的にトーナメントを…同じ選手を二ヶ所では使えないので、独立に 探索できないのが苦しい気がする…。効率化しようと思ったら2.に戻って しまったりしつつ。
  5. 優勝者に直接当たって負ける"1次負け"はlog n人。1次負けの人に当たって負ける"2次負け"の 人は…ちょっと考えてみるとi次負けの人はlog nCi人とわかる。 この人数配分に当てはめてからチェックという問題に変えてみると?総当りグラフ上での 優勝者からの距離でかなり枝刈れそうな気がするけど、よくわからん。 log n次負けの方から探索していく逆トーナメント的な方法は?これもよくわからん。
  6. 要は、優勝させたい人に勝ってしまう輩を全滅させればいいわけだ。そういう選手の うち5.で出した"距離"の遠い方からgreedyに潰していけばよかったりしない?ダメ?

最後のほうはマトモに検討すらしてないのは秘密。難しく考えすぎかなあ。

グラフ理論で「トーナメントグラフ」というと、総当りの勝敗を有向グラフ化したもの …というかつまり無向完全グラフの辺に向きをつけたもののことを言うらしい。 トーナメントグラフは必ずHamilton Pathを持つ、とか、トーナメントグラフには 深さ2のspanning treeがある、とか、らしい。役に立つような立たないような。

16:04 05/09/08

トーナメント問題

ある架空の格闘技"Kacoo"で、8人が総当り戦をしました。結果はこうなりました。

ABCDEFGH
Aoxxoxox
Bxoxxoxx
Coxoooox
Dooxoooo
Exoxxxxx
Foxxxoxx
Gxoxxooo
Hoooxoox

6勝1敗のD君が優勝です。おめでとう。

と、それはともかく、これがトーナメント戦だったらどうだったでしょう。あくまで架空の話 なので、時の運とか連戦の疲れとかそういったものは関係なく、勝敗は常に上の表と同じように 決まるものとします。A vs B はいつも A の勝ちだし、F vs G は必ず G の勝ち。これは当然、 トーナメントの組み方によって優勝者は変わってきます。

   ┌──┴─┐
 ┌─┴┐  ┌┴─┐
┌┴┐┌┴┐┌┴┐┌┴┐
A BC DE FG H

これだと、優勝候補のD君はまさかの一回戦敗退。最終的にC君の優勝です。

   ┌──┴─┐
 ┌─┴┐  ┌┴─┐
┌┴┐┌┴┐┌┴┐┌┴┐
A EG HB FC D

こう組むと、総当たり戦では3勝4敗負け越しだったはずのA君が優勝。大波乱です。

問題

現実にはもちろん、強さにはある程度順序関係がありますから、トーナメントにしても大抵は 順当に強い選手が上にあがってきます。でも今は架空のKacooの話。この設定で 考えを続けてみるとしましょう。『総当りの勝敗表と優勝させたい選手名が 与えられたとき、その選手を優勝させるようなトーナメント表を組んで下さい。』 選んだ選手がどうにも弱くて絶対無理とわかったときは、あきらめてよし。

経過

8人の場合はトーナメントの組み方なんて数百通りしかないので、プログラムで全通り試せば 答えを出すのは簡単です。16人でも力押し全探索で行けるかもしれない。しかし参加選手が 32人、64人、128人と増えていくと…、これは組み合わせの数が増えすぎて、全て試すのは すぐに不可能になります。何か効率的な探索アルゴリズムが必要。なんですけど、 ちょっと考えた限りでは指数爆発しないことを保証できる方法を思いつけませんでした。 解き方募集中ー。

もしかしたら「優勝できるかどうか判定せよ」で既にNP完全問題かもしれないので、 そっちの証明をご存知の方も平行して募集中ー。

追記

質問があったので補足。シードとか出ると面倒かもしれないので、人数はちょうど 2n 人の場合だけ考えればよいことにします。あと、作っていいトーナメントの 形は、ちゃんと公平な、優勝するためにはみんな同じ回数勝ち抜かなきゃいけない 普通の形のものだけです。

00:44 05/09/08

Air TV版

DVD最終巻が届きました。通しての感想は、とにかくあまり分かるのもどうかと思う級にAirをわかってる人々が作ってるのが 隅々から感じられて凄まじいなあ、と。

個人的に原作のPC版で一番好きなシーンは、というか、そこだけあまりにも突出して 印象に残ってるせいで他全部忘れてしまったシーンは、Summer→Airと進んで最初の タイトルロゴが浮かび上がるあたりの流れなのです。なのでDVDはその部分が入る巻 だけ買おうかと最初は考えていたんですが、周囲に煽られたせいでいつの間にか全巻 揃えてしまいましたよ。 で、その肝心のその第9話のラストは…そこにその名セリフを持ってくるのは流石お見事! すげー!…んだけど…けど…直後にBGM切っちゃうのは…そこで無音にすべきと解釈しての 演出なんだろうけど…うーん、個人的には、その週だけEDテーマを差し替えてでも 夏影を1周流しきって欲しかったかなあ。 劇場版の方が好きという評価は揺るがず。

03:52 05/09/07

帯2

さらに「帯にだまされたー」と思った話を続けます。今度はいい意味でやられたっ! と感じた方で、J・ティプトリー・ジュニア 『たったひとつの冴えたやりかた

やった!これでようやく宇宙に行ける!16歳の誕生日に両親からプレゼントされた 小型スペースクーペを改造し、連邦基地のチェックもすり抜けて、そばかす娘コーティーは あこがれの星空へ飛びたった。だが冷凍睡眠から覚めた彼女を、意外な驚きが待っていた。 頭の中に、イーアというエイリアンが住みついてしまったのだ!ふたりは意気投合して <失われた植民地>探険にのりだすが……元気少女の愛と勇気と友情をえがいて読者を さわやかな感動にいざなう表題作ほか、星のきらめく大宇宙にくり広げられる壮大な ドラマ全3篇を結集!

"The Only Neat Thing to Do", J.Tiptree Jr.

これはSFの名作中の名作だから、読む前にどこかでおおざっぱなストーリーや感想の 一つでも聞いてるものなのかもしれない。そうだったら、これを見てから本編を読んでも、 そんなに衝撃は受けなかったかもしれない。でも、この本を初めて手にしたときの私には、 まったくこの物語に対する予備知識が無かった。タイトルだけは聞いたことがあったけれど、 どんな話なのかは全く知らなかった。とりあえず挿絵が漫画チックでビビっていたというのは ともかくとして、普通に楽しげな宇宙大冒険小説かと思って読み出したのです。 ほら、だって、愛と勇気と友情とさわやかな感動とか書いてあるし。自分、深読みせずに 素直に読む人なので。そしたら結末は…

あまり関係ないけど

「たったひとつの~」といえば。 前に『よくわかる現代魔法』というシリーズを見かけて、 各巻のアレゲな副題が気になっていたのだけど、中身についてはあんまり 評判も聞かないし5巻目の「たったひとつじゃない冴えたやりかた」って サブタイトルもネタ切れかな?これは保留~と思っていたところに向井さんの これ を読んで同じく不覚にも感動してしまい買おうかなメーターが微妙にあがっておりまして、 さらに今日読んだ これ で駄目押しがかかれども、そのsieveは間違ってる気がするしかしこれは確認に本屋に 行かねば ← いまここ

00:20 05/09/06

本の話でもしてみる。この前は帯買いしたマンガの話を書いたので、引き続きそんな方向で。 さて、だいぶ昔に帯にだまされたーとだけ 記した日記を当時の私が残していますが、これは実は、恩田陸 『ネバーランド』 を読んだ日のことでした。本屋巡り中の私の目を惹いた帯は、こう語っていました。

「よし、聖夜にふさわしく、統の望み通り懺悔大会といこう。
 ただね、俺重いものを背負わされるのは嫌なんだ。
 秘密って重たいもんだからね。だから、お互い自分の身を守れるように
 一つだけルールを考えたから、それに従ってもらえないかな」
「ルール?」
統は素早く反応した。
「うん、ひとつだけ、嘘を混ぜてほしいんだ」

ネバーランド, 恩田陸

なんだこのステキ設定は! と当時は思ったわけですよ。それから数年後、 人狼BBSのルールを読んでこれが面白くないわけがないと感じた時と、おそらくは 全く同じ"これが面白くないわけがない"を感じていたのです。ひとつだけの「嘘」 … それは一つで全てをひっくり返しうる、他の全ての「本当」を常に揺らがせることが できる。うひゃー、っとワクワクしながら読み始めると………全然そういうストーリーでは なかったー!という。

誤解を避けるために書いておくと、つまんなかった、この小説はダメ、と言いたい わけではないのです。私そもそも恩田陸ファンなのでデフォルトでどの作品も かなり好きですし、この作品も、自分が勝手に妙な期待をしていた分を 差し引けばわりと面白いと感じました。でも、一度妄想してしまった想像上の面白い 物語を読みたい心には行き場もなく、なんとも収まりのつかない気持ちのまま "だまされたー" と書いていたのです。

…以上、思い出話でした。 あ、もちろん、この記事にはひとつだけ嘘が混ざってますので。

01:49 05/09/05

メモ化

ET で、計算結果を次々ルールに追加していく自己書き換え的な、まさにメモ化な版。 SmallTalk で、 再帰的定義を本当に一切使わない本物の Y combinator … fix g = (λp.g (p p)) (λp.g (p p)) をベースにしたもの。 Erlang で並列計算を使ってメモ化する版を書いていただきました。わーい。 Sukuna の作者さんによるfixの例、アスペクトを使った素直なメモ化のもあり。fix_memoを D で自然な形に書いていったら 最終的に Decorator パターンに落ち着いたという話。*_maker の第一引数を メソッドテーブル/thisポインタと思えばいいのか。 Java のannotationでやる版。 memo化の話とfixの話が繋がってるようないないような、いい具合に渾然としております。

というかあれだ、ちょっとだけここをトラックバック受信可能にしたくなった。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0