051 - hacker.sort(students);

「おお! すごいなぺぺ君!」


 上級コースにパールと二人で挑戦しているペチパー=ペアーズことぺぺ君は、見事に僕が設定した第二関門である『バレットとのおいかけっこ』をクリアしてみせた。しかも、その方法は僕の想定していなかった『新たなマギを生み出す』という驚くべき方法でだ。


 これは非常に嬉しい誤算だった。なにせ、まだ大した事も教えていないのに、いきなり新しいマギを発明してみせたのだ。僕の野望とも言える夢に一歩近づいた事になる。僕の教えが良かったというよりも、彼のもつ資質のおかげだろう。しかし、僕の特別授業が彼の才能が開花するきっかけになれたのなら、これほど嬉しい事はなかった。

 パールもどうやら彼に一目おいたようだ。さっきまでの様子だとパールの方がベッタリとくっついて離れていなかったのだが、今は少しだけ距離を開けて彼の背中を見ながら歩いている。この二人の仲も非常に気になるところだが、あんまりプライベートなことを覗き見するのも気が引ける。


 ちなみに、バレットとのおいかけっこは模範解答が設定してあった。実は『バレットそのものに命令を送る』ことができたのだ。例えば『動くな』と命じれば、動かないようにする事も簡単にできた。バレットにはそのように指示してあったのだ。賢いバレットの本領発揮である。

 ここで問題となるのはマギランゲージのもつ『命令』の強制力である。命令というのはあくまでも、ああしなさいこうしなさい、という指示であって、それに従うかどうかは命令を受けた被命令者に委ねられる事になる。恐らくマギランゲージで万物を操る事ができるのは、操る対象に『意思』が存在していないからだろう。


 興味深いのは、人間に対して『命令』を送ると、命令を受けた人が持っているマギデバイスにようになっている。またしてもマギデバイスの新たな一面を見つけたわけだ。記録された命令はあとからスクリーンで確認できるが、仕様書に書かれていただけなので一般には知られてなさそうだ。

 マギデバイスを持たずに命令を受けてみても、送られた側の人間は頭の中でぼんやり『命令』の言葉が聞こえてくるだけで、特に強制的に行動させられるという事もない。これは実験して僕も体験した。命令に逆らう事だって簡単だし、あくまでも命令されたのを知る事ができるというだけだ。恐らく意思を持っているバレットも同様だろう。

 意思の弱い人間や精神的に問題を抱えている人間に対して『命令』する事で、無意識のうちに操るような悪用もできてしまうかもしれないが、マギランゲージの性質上、命令の内容は『動くな』『歩け』などの非常に簡潔なものしか送れないので、都合のいい命令を送るのは結構むずかしい。そもそも、この国でマギデバイスを持ち歩いていない人を探す方が難しいだろう。

 どうしてこのような仕組みになっているのか不思議だが、さすがにマギランゲージで人間すら自由に操り放題になっていたら大変な事になっていただろうから、一種の安全装置なのかもしれない。


「そしてこっちも、あっという間に第二関門突破か……早かったなぁ」


 ぺぺ君の大活躍を横目に、今度は反対のスクリーンに目を移す。そこには赤い髪のボスが映っていた。いや今はビールという偽名を名乗ってるんだったか。まあいいや。

 今、彼女はスクイー君を連れて第三関門へと続く廊下を颯爽と闊歩している。胸を張って「どうだバンペイめ!」と嬉しそうだ。

 ボスとスクイー君のペアは苦戦するかと思われた第二関門を驚くべきスピードでクリアしてみせたのだ。初級コースとはいえそれなりの問題を設定したのだが、ボスが意外な活躍を見せた。


 初級コースの第二関門に設定した扉に書かれていた問題は以下のようなものだ。


 ━━━━━━━━━━━━━━━━━━━━

 4 6 2 3 5 1


 この通り1から6の数字が書かれた箱が6個並んでいます。

 これらの箱を、数字の順番になるように並び替えたいです。


 一回の手順で、二つの箱の位置を入れ替える事ができる時

 最小だと何回の手順で順番通りに並べられるでしょうか?


 例えば 2 3 1 なら

 2 3 1 → 2 1 3 → 1 2 3

 で2回です。

 ━━━━━━━━━━━━━━━━━━━━


 初級コースにしては難しい内容かもしれないが、マギが一切関わってこないだけ易しい内容だ。それに、この問題は一見難しいように見えるが、実はとても簡単に答えを求める事ができる。ボスもそれがわかったから、あっという間に攻略してしまったのだ。


 このように物を順番通りに並べる事を「ソート」と呼び、プログラミングの世界ではたびたび登場する。

 並び順はなにも数字の大小だけではなく、例えば日付順だったり、あいうえお順だったりするが、様々なデータを順番に並べて見せる、というのはアプリケーションの基本的な機能の一つだ。

 ソートするためのアルゴリズム、つまり並び替える時の手順には様々な方法がある。人間だって無意識に特定のアルゴリズムに従っている。

 例えば、本棚で無造作に並んでいる本を巻数の通りに順番に並べたい時には、一巻から順番に一冊ずつ取り出して並べていく、という方法を取る事が多いだろう。このように、小さいものから順番に抜き出していく方法は「選択ソート」と呼ばれている。一番小さいものを『選択』しているからだ。


 そして、問題文に書いてある「隣あった二つを入れ替えて並び替えていく」というのもソートアルゴリズムの一種であり、「バブルソート」と呼ばれている。バブルとは「泡」の事だ。なぜ「泡」なのかは、並び替えていく時の数字の動きが関係している。


 例えば問題文にある並び順で、『1』に着目する。この『1』を正しい位置、つまり先頭に置くには隣の数字と一つずつ入れ替えていく必要がある。つまり、こんな具合だ。


  4 6 2 3 5 1 (元の並び順)

  4 6 2 3 1⇔5 (1と5を入れ替え)

  4 6 2 1⇔3 5 (1と3を入れ替え)

  4 6 1⇔2 3 5 (1と2を入れ替え)

  4 1⇔6 2 3 5 (1と6を入れ替え)

  1⇔4 6 2 3 5 (1と4を入れ替え)


 さらに、今度は『2』に着目して並び替えていくとこうなる。


  1 4 6 2 3 5 (1だけ正しい状態の並び順)

  1 4 2⇔6 3 5 (2と6を入れ替え)

  1 2⇔4 6 3 5 (2と4を入れ替え)


 やはり『1』の場合と同じように、次々と左(上)に向かっていくのが視覚的にわかる。


 この『数字が左(上)に向かっていく様子』が、水の中で『泡が水面に向かって上っていく様子』に似ている事から、バブルソートと呼ばれているのだ。洒落た名前だと思う。


 あとは、この数字の移動を『5』まで着目しながら繰り返せばソートは完了だ。『5』を並び終えた時点で順番通りなので『6』に着目する必要はない。

 バブルソートは人間がよく使う選択ソートと違って直感的ではないのだが、しっかりと並び替える事ができる。アルゴリズムというのは本当に面白くて奥が深い。

 他にも様々なアルゴリズムがあるが、それぞれに特徴があり長所と短所があるので、どのアルゴリズムが一番優れていると一概に述べる事はできない。対象となるデータの傾向や必要な機能に応じてプログラマがアルゴリズムを選ぶ必要があるのだ。これがプログラミング初級者から中級者への壁の一つとなる。


 さて、ボス達があっという間に答えを出してみせた「最小の入れ替え数を求める」という問題の答えなのだが、これは意外と簡単に求められる。

 先ほど『1』に着目して先頭に持っていく時、5回の入れ替えが必要だった。これは、『1』の前に5つの数字があったからだ。


  4 6 2 3 5 1 (1の移動前)

  1←4←6←2←3←5 (1の移動)


 そして『2』に着目して先頭に持っていく時、2回の入れ替えが必要だった。『1』を並び終えた時点で、『2』の前に『1』を除いて2つの数字があったからだ。


  1 4 6 2 3 5 (2の移動前)

  1 2←4←6 3 5 (2の移動)


 つまり、各数字について、それらの前にある『自身より大きい数字』の数を数えていけば、その数字が正しい位置へ移動するために必要な入れ替え回数がわかる。あとはそれを全て足し上げれば、全体の最小回数がわかるというわけだ。


  4 6 2 3 5 1  (問題の並び順)


  1の前にある1より大きい数字:5つ(4 6 2 3 5)

  2の前にある2より大きい数字:2つ(4 6)

  3の前にある3より大きい数字:2つ(4 6)

  4の前にある4より大きい数字:0

  5の前にある5より大きい数字:1つ(6)

  6の前にある6より大きい数字:0


 よって、答えは『5+2+2+0+1+0』で『10』だ。

 本当にこれが最小の入れ替え数かどうかの証明は省くが、数字の前後関係だけが重要なので、どんな順番で数字を入れ替えても正しい位置に動かそうとする限り結局は最小手順をたどる事になる。

 そのため、のだ。


 頭で考えてみるより、やってみればすぐにわかる問題の典型だろう。ボスは頭で考える様子を見せずに手早く実際に並び替えを行なってみて、出てきた回数を答えただけだったのだ。ボスがいれば第二関門の突破は多少早くなるかと思っていたが、まさか微塵も考える素振りを見せないとは別の意味で驚きだった。

 マギの学校でこのような問題を出したのは、アルゴリズムの考え方を少しでも学んでほしいという思いからだった。実際に手を動かしてみれば、プログラムの気持ちが理解できる。そうすると、自ずとどうプログラムを組むべきかが理解できる。

 ボスが同行している事でスクイー君の学習機会を奪ってしまっているかもしれない。次の第三関門はそう簡単にはいかないだろうが、注視しておかなくてはならない。


//----


 順調な二組は良いとして、問題は中級コースに行った大多数の生徒達だった。

 第二関門にたどり着いたまでは良かったのだが、現在大苦戦している最中である。というのも、中心人物である真面目な生徒のヴィル君がなかなか問題を解けずにいるからだ。


 彼らが頭を悩ませながら囲んでいるのは、一辺が20cmほどの立方体になっている黒い『箱』、そして招き猫の形をした『猫の置き物』。

 問題というのは、この中に入っている鍵を取り出すというものだ。そのためには、マギランゲージで『箱』をどうにかして開ける必要がある。当然ながら、ただ『開け』と命令しても開かない。箱を開くためにはマギランゲージの基本の一つである『問い合わせ』が必要となるのだ。


 マギランゲージというのは全てがオブジェクト物事に対する『命令』でできているが、『問い合わせ』というのは特殊な『命令』の一つだ。オブジェクトに対して現在の自分の状態を教えるように『命令』する事を指す。

 例えば、コップに入った水に『温度を教えろ』と命令すれば現在の水温がわかる、といった具合だ。オブジェクトには温度のように様々な『状態』があり、状態に応じてマギの動作を変えるなどしょっちゅうである。


 問題の『箱』を開けるには『パスワード』が必要で、パスワード付きで『開け』と命令しなければ開かない。そして現在の箱のパスワードは、箱と一緒に置かれている『猫の置き物』が『問い合わせ』で教えてくれるようになっている。

 だが、このパスワードというのはランダムに変化し続けており、取得したパスワードをすぐに箱に送らなければ意味がないのだ。マギランゲージで、取得したパスワードをすぐに送るようにプログラムを作る必要がある。

 これらの事は全て問題文として彼らに提示してある。


 僕の授業を受けた彼らなら問題ないと思っていたが、どうやら見込みが甘かったらしい。問い合わせの命令を送る事はできるのだが、返ってきたパスワードをうまく受け取る事ができないようだ。確かに少しコツがいる部分だが、あくまでもマギランゲージの基本のはずである。

 中心のヴィル君以外の生徒達はヴィル君頼りである事が露呈してしまい、問題を解く事に消極的になっている。あまり良いとは言えない傾向だった。テコ入れが必要だろう。


「やあ、調子はどうかな?」

『せ、先生。この問題、本当に生徒向けなんですか? 難しすぎると思うのですが……』


 スクリーンの向こう側で、僕の声に頭を上げたヴィル君が弱音を吐いた。


「おいおい、必要となるのはどれもマギランゲージの基本だよ? うーん、ヴィル君達には難しかったかな? どうやら僕が期待しすぎてしまったのかな」

『む、そ、そんな事はありません!』

「ヴィル君以外のみんなはどうだろう? 今からでも初級コースに移動するかい?」

『いや、そ、それは……』

『うーん、俺はそれでも……』

『馬鹿! 初級コースに行ったのは、あのスクイーだけだぞ? スクイーと同レベルだって思われていいのかよ』

『うっ、それは嫌だな……』


 どうやらスクイー君は他の生徒達に見下されるような立ち位置にいるらしい。あからさまに相手を見下すのは立派なイジメだが、スクイー君があの調子ではなかなか解消は難しい。彼にはもっと成長してもらって他のみんなを見返せるようにがんばってもらおう。


 僕の挑発的な物言いが効いたのか、ヴィル君も、彼以外の生徒達も発奮してやる気を出している。ヴィル君は負けず嫌いなところがあるだろうと思ったのだが、正解だったようだ。この調子なら、みんなで協力して第二関門を突破できるだろう。


『ねぇねぇ先生ぇ。なにかヒントはないのぉ? わたしぃ、つかれちゃったぁ』

「ありません。じゃあ、がんばってね」


 最後に女子生徒が色目を使ってきたが、初級コースにいるボスが見ている気がして会話を打ち切った。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る