第四話 二万ミリ秒からの高速化
メンデス・ロボット・ラボラトリの建物は、アイスホッケー場ほどの大きさだった。外側は灰色のコンクリートがむき出しで、一階はトラックが通れそうな金属製の扉がいくつかある。二階の窓からは棚や机が見えた。
一階が工房で、二階が事務所なのだろう。建物と塀のあいだは庭になっており、雑草がきれいに刈り取られていた。
車寄せの屋根の下で車は停まった。入り口の周辺には、椰子が植えてある。レオナルドは降りるように言われて、扉を開けて地面に立った。
「こっちだ」
ギレルモが建物に入る。ノートパソコンを抱えたカルロスがあとに続く。レオナルドもあとを追い、階段を上る。
廊下を進み、会議室に通された。室内にはホワイトボードがあり、木製の机や椅子が並んでいる。
ホワイトボードに近い机に、パソコンが一台あった。ギレルモに促されて前に座る。自分のノートパソコンを使うのではないのか。持ってこさせたのにと疑問に思う。
「次の試験だ。まずは開いているファイルのプログラムを実行しろ」
レオナルドはモニターを見る。画面に統合開発環境のウィンドウがある。レオナルドはソースコードを確認した。forでループが回してある。回数は一万回。そのあいだに、百行を超えるプログラムが書いてある。
マウスを握ったレオナルドは、実行ボタンをクリックした。開始時間が画面に出て、しばらくしたあとに計算結果が出力される。その下に、先ほどの時間からの経過時間が表示される。
二万ミリ秒。秒に直すと二十秒だ。一ループあたりの消費時間は二ミリ秒。かなり重い処理だ。
「このプログラムを高速化しろ。制限時間は十分だ」
ギレルモは腕時計を見て告げた。どこまで高速化しろという指示はない。どのレベルまでできるのか見るということか。
レオナルドは考える。時間は十分しかない。一度の実行テストには最大二十秒かかる。十回テストをおこなえば二百秒、三分以上の時間を失う。
まずはループの回数を書き換えて、繰り返し回数を五百回にした。一度の実行テストが一秒になる。これで、効率よくテストができる。
試しに一度実行する。想定したとおり一秒で終わった。最後に一万回に戻すのを忘れないように、ソースコードにメモを書いておく。
処理の全体をながめ、ボトルネックになっている部分を探す。計算量が多い。アルゴリズム――処理の方法――を変えれば、劇的に減らすことができる。
五分かけてプログラムを書き換える。実行すると〇・一秒になった。九十パーセントの時間削減。普通のプログラムなら、これで満足する。しかし今回は違う。実力を見せるためのものだ。お行儀のよい書き方をする必要はない。手練手管を尽くして、処理時間を削ろう。
配列へのアクセスを工夫して時間を稼ぐ。再帰処理をやめてループにする。浮動小数点数を使っている場所を、もっと軽い型に変える。計算順番を変更する。そうした細かな対策とともに、コンパイルの設定を変えて、過剰な最適化をおこなった。
さらに邪道な方法にも手を染める。メモリの確保と解放の処理を可能な限り省略する。お行儀の悪い、処理時間のみに特化したプログラムにする。
レオナルドは時計を見ながら、どこで作業を打ち切るか考える。
残り一分。実行すると〇・〇七七秒になった。繰り返し回数を一万回に戻して実行する。処理時間は一・五四秒。これでよいだろう。そこで十分が終了した。
ギレルモとカルロスが背後に来た。画面には、ごちゃごちゃとしたコードが表示されている。ギレルモは実行ボタンを押す。十三倍近く速くなっていることを二人は確かめた。
「合格だ」
不満そうにギレルモは言う。まるで不合格だった方がよかったような言い種だ。
「それで仕事は、なにをするんですか?」
こちらのプログラミング能力は示した。今度はギレルモが、どんな仕事なのか説明する番だ。
「ノートパソコンやスマートフォンは持ってきたか?」
「ええ」
「出してみろ」
レオナルドは、鞄からノートパソコンと壊れたスマートフォンを出して、机に置いた。
「カルロス。取り上げろ」
「はい」
カルロスは机の上の機械を奪い、距離を取る。
「なっ!」
レオナルドは取り返そうとして席を立つ。ギレルモが大きな手で、レオナルドの顔をつかみ、力を込めた。レオナルドは苦痛の声を漏らす。
「仕事が終わったら返してやる。それまでは黙って仕事をしろ」
ギレルモは手を開き、レオナルドを解放した。頭蓋骨が割れるかと思った。レオナルドは顔を抑えながら痛みが引くのを待った。
「僕は帰る。パソコンとスマートフォンを返せ!」
レオナルドは、怒りに任せて怒鳴る。
「ガタガタ言うな! 俺だって人数を増やすのは嫌なんだ。だがプログラマが足らず、探してきて雇えと命じられて、仕方なくおまえを試験したんだ。
島の人間を使うと噂になって困るからな。おまえは、おあつらえ向きなんだよ。しばらく缶詰めになってもらうぞ」
ギレルモの言葉を無視して、ノートパソコンに手を伸ばす。ギレルモが素早く動き、拳を振った。レオナルドは腹に一撃を食らい、体をくの字にして悶絶する。
「カルロス。ロープを持って来い」
「はい」
カルロスは、返事とともに部屋の外に飛び出した。ギレルモはレオナルドの髪をつかみ、コンクリートの床に押しつける。
「おまえのような外部の者を、イバーラさまのところに連れて行くのは嫌なんだよ。いいか、屋敷に着いたら面倒を起こすな。もし逃げたら、二度とプログラムが書けないように腕を切り落としてやる」
レオナルドは動くことができず、その場で体をよじり続ける。
カルロスが部屋に戻ってきた。レオナルドは手足を縛られて、ギレルモの肩に担ぎ上げられる。
一階に下り、玄関から出る。先ほど乗ってきた車の後部座席に放り込まれた。ギレルモが運転席に、カルロスが助手席に乗り込む。
車は工場を出発する。工業地帯を抜けて、北へと向かう道に入る。
車は無舗装の荒い道を、ガタガタと揺れながら進んでいく。レオナルドは徐々に落ち着きを取り戻してきた。体を起こして、これまで得た情報を整理する。
ギレルモはイバーラさまのところに連れて行くと言った。島の有力者でイバーラという名前の人物をレオナルドは知っている。
フランシスコ・イバーラ。大富豪で、この島の実質的な支配者だ。リベーラ島を近代化した立て役者でもある。そして、住民のあいだに大きな格差を作ったと、デモの参加者たちが非難している人物だ。
レオナルドは、彼について調べたことを思い出す。
リベーラ島出身のこの男は、既に七十歳になる。若い頃は鉱山労働者だったが、山師となり、多くの鉱山や油田を発見した。それらの経営で莫大な富を築き、三十年ほど前に島に舞い戻ってきた。彼は、五年前に島民に足を撃たれて、今は車椅子生活をしている。
「フランシスコ・イバーラの屋敷に行くのか?」
返事はなかった。おそらく合っているのだろう。
なぜフランシスコ・イバーラは、島外のプログラマを必要としているのか。どうして自身の動きを、島民に気づかれたくないのか。レオナルドは、フロントガラスの向こうの景色を見つめて、表情を険しくした。




