「うーむ。なんという恐ろしい魔法であったことよ」
ウンディーネの部屋で、首尾よく問題に正解した真紅たち一行は、次の部屋へと続くはずの通路を歩いていた。歩きながら、ガフンダルは、しきりに冒頭の台詞を繰り返していたのである。
「わが生涯で見聞した魔法の中でも、まあトップ3に入れてよいであろうなあ」
「さっきから何をぶつくさいってるの?ガフンダル。なにが恐ろしい魔法なのよ?」老人の繰言に付合っていても始まらないので、黙殺していた真紅であったが、ガフンダルがあまりにもしつこくくりかえすので、たまらず質問してしまった。
「何がってルビイよ。水の精霊ウンディーネ殿の、幼児退行魔術だよ。あの魔術の前には、どんな荒くれ男でも、一瞬にしておとなしくなってしまうぞ。あのような魔法は、いままで見たことがない」
「あら。あれは魔法じゃなくて、ウンディーネさんのお人柄、じゃなくて、お精霊柄じゃないかしら」チョントゥーが珍しく口を挟んだ。
「そうよ。あれはウンディーネさんの人柄、じゃなくて、えーっと。なんだっけ?チョントゥー先生?」
「精霊柄」
「そうそう。精霊柄よ。わたしも将来、ウンディーネさんみたいに、優しくて包容力のある女性になるわ。あ、そうだ!ワタシ、ぜったい保育士か幼稚園の先生になる!」真紅が両のこぶしを握り締めて、力強く決意表明した。
「プログラマーになるっていったもん・・・」VAIOから、寂しそうな健一郎の声が聞こえてきた。「この地下大洞窟を見事クリアできたら、プログラマーになるって言った。そうだろうルビイ?あれは口からでまかせだったのかい?」
「そうよ!」真紅が思わず口を滑らせてしまった。
「やっぱり。そうだったんだね。ルビイは普段からプログラマなんて、クライ、クサイ、キモイの3Kだっていっていたからねえ。それが、突然プログラマになるって言い出したんで、おかしいと思っていたんだよ」健一郎は、身も世もないほど悲しそうな声で言った。
― しまった。ついつい成り行きで、ホントのこと言っちゃったわ ―
「ルートを変更してもらおうかな。この『超難関クイズコース』はもう諦めていただいて、『モンスターてんこ盛りコース』か、『アスレチック・コース』へ変更していただきましょうか。もう私は疲れました」
― やばい。本格的に拗ねちゃってるわパパ。どうしよう。こういうときは、年の功でガフンダルに丸く治めてもらうしかないわね ―
真紅はそう考えて、ガフンダルに向かって目配せする。
真紅の都合のよい考えを察したのかどうかは知らないが、ガフンダルが話し始めた。
「健一郎殿、ワシの記憶が確かなれば、ルビイは『プログラマになる』とは一言も言っておらず、『検討してもよい』と言っただけではなかったかと思うのだが」
「そ、そうよ」 ― そうだっけ? ― 自分が口に出したことなのに、なんとも無責任極まりない真紅であった。
ガフンダルはさらに続けた。「ま、ルビイは13歳であるから、まだまだ将来進むべき道を確定すべき時ではあるまい。子供は親の姿を見ていないようでよく見ておるでな。今後、健一郎がルビイに対して、プログラマーがいかに素晴らしい職業であるかを示せれば、この子も自然とプログラマの道を選ぶだろうよ」
― いいこと言うわ。このじいちゃん! ―
「なるほど。よくわかりました。ガフンダル殿のおっしゃる通りです。そのためにはまず、この地下大洞窟をプログラミングの力で見事突破しなければなりませんね」こころなしか健一郎の声が明るくなった。
「その通りじゃ。その通りじゃとも。健一郎殿」
「でも、職業には向き不向きがあると思う。ルビイはそんな机にじっと座っている仕事には向かないと思うな。きっと」パイソンが空気を読まない意見を述べて、ガフンダルの戦術をぶち壊しにしてしまった。
― あっちゃぁー。いらんこと言ってくれるわねパイソン。でも正論だわ ―
健一郎がそのまま黙り込んでしまい、気まずい雰囲気が流れる。
しばらくすると、今まで黙っていたチョントゥー医師が話に割り込んできた。「えーっと。このこの冒険の目的って、ルビイちゃんの将来を決定するものじゃなくて、健一郎さんの奥さん、ルビイちゃんにとってのお義母さんの命を助けることじゃなかったんでしたっけ?だから今はそんなことで議論してる暇はない気がします。あの、差し出がましいこと言っちゃってごめんなさい」
「そうじゃ。とにかく今はそのことだけを考えて先へ進むのじゃ。異存はなかろうな。健一郎殿」
「そうですね。わかりました」健一郎も納得したようだ。
「やったぁ。さすがはチョントゥー先生ね。ワタシも将来チョントゥー先生みたいなお医者さんになろうかなー」
喜ぶ真紅に対して、全員の冷たい視線が集中した。
ウンディーネの部屋から次の部屋へと続く道は、赤一色であった。単純な発想でいくと、先ほどは青一色で水の精霊ウンディーネであったのだから、今度は赤だから火の精霊であろうと予測され、全員の一致した見解となっていた。
「うーん。火に関係のあるパズルといえば・・・うーむ。どんなものがあったっけ」健一郎はしきりに事前対策を練っている。ガフンダルとチョントゥーは、これから訪れる予定の山岳都市バクーハンについて情報を交換し合っていた。そして真紅はというと、退屈でチョー眠い。などと言い出して、パイソンにおんぶしてもらい、クークーと寝息を立てていた。地下迷宮探索中に、主人公が幸せそうに寝ているというのは、通常ありえない状況であるが、パイソンはまんざらでもないようだ。
ややあって、次の部屋の扉が見えてきた。
「さあ、そろそろ次の部屋に着くぞ。パイソン、ルビイを起こしなさい」ガフンダルがパイソンにそう言うと、パイソンは、背中の真紅を何度かゆする。「おい、ルビイ、起きろよ」
「ん。ん?」真紅は完全に寝惚けている。「もうごはんなの?」
ガフンダルは、苦笑しながらそんな真紅の様子を横目で見つつ、扉の前に立った。今回も自動ドアになっているようで、扉の上部にあるパトランプが派手な音を発して明滅し、扉が徐々に開いていく。
と、突然、ガフンダルに向かって真っ赤な塊がすっ飛んできた。平素のガフンダルであれば、軽く身を交わすか、魔法で防御壁を作るところであったが、今回は真紅の様子に気を取られていたので、その真っ赤な塊ともろに激突してしまった。
「でぇえええええええー」
ガフンダルはたまらずもんどりうってひっくりかえる。真っ赤な塊も、反対方向へ、ころころとひっくり返っている。
「こりゃあ!気をつけぬか!このうつけものが!」ガフンダルが赤い塊を怒鳴りつけた。
「まことに面目ない。ただいまちょっと取り込み中でございまして・・・」赤い塊は仕切りに恐縮してガフンダルに謝罪している。
赤い塊。それは、ちょうどパイソンと同じぐらいの背丈があるトカゲであった。
「私の名前はサラマンドラ。ごらんの通りの火トカゲでございまして。はい」サラマンドラは、体よりさらに赤い長い舌をチョロチョロさせながら自己紹介した。
「な、ということは、貴兄がこの部屋の守護精霊か?その守護精霊が訪問者に対して、いきなり体当たり攻撃を仕掛けてくるとはどのような風の吹き回しかな?」ガフンダルが、若干の怒気を含んだ口調で、サラマンドラに詰め寄った。
「決して体当たり攻撃を仕掛けたわけではございません。私はあれに張り飛ばされたのでございます。そこへたまたま貴方が開いた扉の向こうに立っていらっしゃったと。こういう次第で」サラマンドラが指差した奥の部屋には、彼の十倍以上ある火トカゲが寝そべっていた。ゴーゴーとイビキをかいて寝ているようであったが。
「うちのやつでございまして」サラマンドラが申し訳なさそうに言った。
「ということはですな、ワシは夫婦喧嘩のとばっちりを受けたと、こういうわけですかな」
「さようでございます。火トカゲのメスは、もともと大変気性が荒うございまして。うちのは、先日出産したばかりで、余計機嫌が悪いのです。かてて加えて、私がこれまた粗忽者となれば、夫婦喧嘩が絶えないと、まあそのようなことで」
「ということは、我々がここに訪れたときに、ちょうどタイミングよく粗相をなさったと?」
「はい。実はタマゴの入れ物にけつまずいてひっくりかやし、中身を全部ぶちまけてしまったのでございます」
「そりゃ、奥さんも怒るんじゃない。タマゴ全部割れちゃったんでしょ」真紅が口を挟む。
「いいえ。火トカゲのタマゴはちょっとやそっとでは割れたりしません。子供トカゲが孵化するまではね」
「じゃあ、また箱に戻しておけばなんの問題もないじゃない」
「ところがそう簡単にはいかないのです。うちのは非常に几帳面でして、タマゴの小さいのから大きいのまで、ぴしーっと見事、順番に並べてあったのですよ。ですもんで」
「なんだ。じゃあワタシがやってあげるわよ。簡単じゃない」真紅がそう申し出たが、サラマンドラは、なにやら浮かぬ顔をしている。
「古来より夫婦喧嘩は犬も喰わぬといってな。仲裁のお手伝いをして差し上げたいのは山々なのじゃが、我々もちと急ぐ旅なのじゃ。であるから、向こう側の扉を開くクイズを出題願おうかな」ガフンダルが対面にある扉を指差しながらそういった。
サラマンドラはしばらく思案顔であったが、何かを思いついたようで、急に明るい表情になって口を開いた。
「わかりました。こう見えても、難問クイズレパートリー1200問を誇る私ですが、今回はこれで行きましょう。私たちのタマゴをきっちりサイズ順に並べてください。簡単すぎるかもしれませんが、背に腹は代えられません。でも、もたもたしてちゃ困りますよ。そうですね。5ノルゴルン(10分)程度でお願いししたいですね。今うちのは怒り狂って昼寝中ですが、もうすぐ眼を覚ますでしょう。そのときまでにタマゴを元通りにしておけば、怒りもおさまるかと」
「それが問題?簡単じゃないの。タマゴを小さい順に並べるなんて、わざわざパパに助けてもらわなくてもなんとかなるんじゃない。で?タマゴはどこ?」真紅は、健一郎の力を借りなくてもよいというだけで、すっかり上機嫌である。
「こちらです」
「どれどれ?げえええええええ!なにこれ?」
サラマンドラが指差す先には、様々な大きさのタマゴがずらーっと並んでいた。
「ちょ、ちょっとサラマンドラ。一体何個あるの?このタマゴは」真紅が驚いてサラマンドラにたずねた。どうやら真紅は5個程度の数を想定していたようである。
「きっちり50個ございます」
「ご、ごじゅっこぉー!?」
「まあ、子だくさんですこと」チョントゥーが、間抜けな感心のしかたをする。
一口にタマゴといっても、大きいものでは130ノルセン(130cm)ほどもある。重さも相当のものであろう。えっちらおっちら運んでひとつひとつ比較していると、とても5ノルゴルンでは終わりそうになかった。
「パパ。出番ですけど。パパってば」
「ふん。私の力など不要ではなかったのか。まあよい。ここで拗ねたりすると大人気ないからな」
― へえんだ。今まで十分大人気なかったっつーの ―
「えーと。ガフンダル殿、もしくはチョントゥー先生。何でもよいので、長さを測ることができるもの、それから字が書けるものをお持ちではありませんかな?」健一郎が自信たっぷりで、全員に指示し始めた。
「巻尺がありますわ。医療行為はほとんどボランティアですので、仕立ての副業をしてますから。それと、まゆずみがあります」チョントゥーが自分の持ち物を差し出してきた。
「これはかたじけない。ではルビイ、パイソン君と協力して、左のタマゴから順番に高さを測って私に報告してくれ、そのときにそのまゆずみで1から順番に番号を書いていってくれないか」
真紅とパイソンは健一郎に言われたとおり、次々とタマゴの高さを測り、健一郎に報告し始めた。
「えーっと、これで最後よ。50番、130ノルセン!」
「よろしい。ではソート処理を始めようか」健一郎がそう言うと、スクリーンにウインドウが出現した。
「よし、ではheight.datファイルを読み込んでと。どうだね?」真紅がスクリーンを覗き込むと、番号のふられたタマゴが横2段に並んで表示されている。
「ではルビイ。その『並べ替え』ボタンを押してごらん」
「はい」真紅が並び替えボタンを押すと、下の領域に、小さいもの順に整然と並べ替えられたタマゴの列が出現した。
「すごぉーい」真紅が賞賛の声を上げた。
「喜ぶのはまだ早いぞ。コンピュータの中だけで並び変わっただけだからな。この番号の通り、タマゴの実物を並べ替えるのだ」
数が多いとは言えど、たかだか50個のタマゴである。真紅とパイソンの息のあった共同作業により、あっという間に並び変わってしまった。まあ途中で2、3個地面に落っことしていたが、さすがは火トカゲのタマゴである。少々のことでは割れない。最後の方では、持ち上げて運ぶのが面倒になり、地面を蹴り転がしたりしていた。
「はい。終わったわよ」真紅と、パイソンは、同時にパンパンと手を払っている。この辺りの息もぴったりになってきた。
「すんばらしい。すんばらしい。すぅんばらしい。見事サイズ順に並び変わりましたね。うちのやつもまだ寝ているようですし。これで折檻を受けずにすみます。貴方たちは勇者でありかつ私の命の恩人です。どうもありがとう」サラマンドラは感極まったかのようにすすり泣きだした。
「そうだ。勿論次の部屋へ続く扉は開いて差し上げますが、さらにこれは私の気持ちです。どうかお受け取りください」と、サラマンドラは、30ノルセン(30cm)ほどの真っ黒な物体を真紅に差し出した。
「なに?この干からびた汚らしいモノは?」真紅が叫び声をあげた。
「それは、『火トカゲの尻尾の黒焼き』です。動悸息切れ、宿酔い、精力減退、めまい、冷え性、血のみち症、夜泣き、疳の虫と、あらゆる未病によく効くお薬です」
「ふーん。あんまりワタシには必要ないみたい。あ、そうだ。チョントゥー先生にあげる」
「本当?『火トカゲの尻尾の黒焼き』は、超貴重なお薬なのよ。これだけあれば、たくさんの人を助けることができるわ。ありがとう、ルビイちゃん。サラマンドラさん」チョントゥーは踊りださんばかりに喜んでいる。
「さあ。これで二つ目の部屋も攻略したぞ。うむ。非常に順調じゃ。だが、ここで気を緩めてはならんぞ。さあ、次の部屋へ急ごう」ガフンダルが号令をかけた。
「ちょっと待ってください」健一郎の消え入りそうな声。
「おっと、しまった。プログラムの解説が残っていたか。そうじゃ健一郎殿。こうしよう。次の部屋へ歩いていく道すがら聞くことにしようではないか。それでよいかな」
「まあ、解説させていただければ、別に歩きながらでも構わないのですが」
「さようか。では決まった。それではサラマンドラ殿。われわれはおいとまさせていただくぞ。さらばじゃ」ガフンダルがサラマンドラに挨拶をした。
「道中お気をつけて」サラマンドラは石を二つカチカチと打ち合わせている。
さて、今回の『タマゴの並べ替え』プログラムですが、メインのアルゴリズム、『クイックソート』は、あまりに有名なものなので、取り立てて説明する必要もないと思います。『クイックソート』は、いくつかあるソートアルゴリズムの中で最速であって、プログラマの皆さんであれば、一度は眼にしたか、実際自分が使用する言語で実装された経験があると思われますので、詳細な解説はいたしません。
ただ、このプログラムで是非触れておきたい点が、ひとつあります。
それは、『ファイルの読み込み』です。このプログラムは、外部のテキストファイル。即ちタマゴのサイズが記録してある、ローカルのheight.datを読み込んで処理します。次のコードです。
#ファイル選択
def selchange
begin
fname = @window.document.all("fl").value
if [[FileTest]].exist?(fname) then
#ファイルが存在する。
@maxHeight=0
no=1
File::open(fname) {|f|
f.each {|line|
h = Integer(line.chop)
#最大値を退避
@maxHeight = h if h>@maxHeight
#サイズを番号つきで配列に格納する
@heights << (h.to_s + "," + no.to_s)
no+=1
}
createEggs #タマゴを生成する
}
#画面の表示
@window.document.getElementById("field").innerHTML
= buildScreen
@window.document.getElementById("btnSort").style.
display = ""
else
#失敗
@window.alert "ファイルが存在しません"
end
rescue
@window.alert "ファイルよりデータ取得時にエラー発生!!!"
end
end
Webサーバから送出されてくるHTMLファイルだと、このような処理は絶対に動作しません。なぜなら、HTMLファイル中のスクリプトがローカルリソースをアクセスするなどもってのほかだからです。
これは、hta(HTML Application)だからこそ許されるのですねえ。
以上でプログラムの解説を終わります。ご静聴ありがとうございました。
健一郎がプログラムの解説を終わっても、誰も反応しなかった。
なぜならば、真紅はまたぞろパイソンの背中で寝息を立てていたし、ガフンダルとチョントゥーは、『火トカゲの尻尾の黒焼き』の効能について、真剣に議論していたからである。
最終更新:2009年01月14日 22:19