表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
空想科学オカルト小説 南方呪術島の冒険  作者: 雲居 残月
第一章 南海の孤島リベーラ
3/56

第三話 プログラミング試験の罠

 車の中でギレルモは、隣の助手席に座るカルロスに指示を出す。カルロスは膝の上にノートパソコンを置く。画面には統合開発環境が表示されている。


「試験は最低レベルから始める。そして徐々に難易度を上げていく。使えるプログラミング言語はなんだ?」


「C、C++、C#、Java、JavaScript、Python、Swift、Go、Kotlinなんでもいいですよ。

 ScalaやHaskellも少し使います。PerlやPHP、COBOLやLispでも大丈夫です。新しい言語を学べと言われれば、二十四時間あれば、ひととおり書けるようになります」


 この一年の仕事で、様々なプログラミング言語に触れた。名前を挙げていないマイナーな言語も修得している。ギレルモとカルロスは、驚いた表情をしながら話し合った。


「分かった。じゃあ予定どおりC言語で試験をする」


「いいですよ」


 そうだろうなとは思っていた。

 MRLはロボットの会社だ。ロボットの制御には、C言語がよく使われる。Cは、多数あるプログラミング言語の中では、人間ではなく機械に寄り添ったものだ。高速に動作して、繊細に機械を扱うのに向いている。


「それでは問題だ。一から百までの数を一行ずつ出力するプログラムを作れ。ただし三の倍数のときは、数の代わりに『Fizz』、五の倍数のときは『Buzz』と出力し、三と五の両方に共通する倍数のときは『FizzBuzz』と出力せよ」


 レオナルドは心の中で笑う。これは有名なFizzBuzz問題だ。プログラマでない人間を門前払いにするための、初歩の初歩というべき試験だ。

 このレベルの質問をされるとは思っていなかった。レオナルドは答えを書くために、助手席のノートパソコンに手を伸ばす。


「――ただし、口頭で答えよ」


 腰を浮かせたレオナルドは、そのまま動きを止めた。ギレルモは挑むような目でレオナルドをにらんでいる。

 なるほど、脳内だけでプログラムを組み立てろということか。単純なFizzBuzz問題では面白くないと思っていたところだ。


  #include <stdio.h>

  int main(void) {

    int i;

    for (i = 1; i <= 100; i++) {

      if (i % 3 == 0 && i % 5 == 0) {

        printf("FizzBuzz\n");

      } else if (i % 3 == 0) {

        printf("Fizz\n");

      } else if (i % 5 == 0) {

        printf("Buzz\n");

      } else {

        printf("%d\n", i);

      }

    }

    return 0;

  }


 レオナルドはソースコードを口頭で述べた。その文字の羅列を助手席のカルロスが入力していく。全ての文字列の入力が終わり、カルロスは実行した。


  1

  2

  Fizz

  4

  Buzz

  Fizz

  7

  8

  Fizz

  Buzz

  11

  Fizz

  13

  14

  FizzBuzz

  ……


 数字と文字が出力され、正しい答えが表示された。


 ギレルモはアクセルを踏み、車を急発進させる。レオナルドは、勢いよく後部座席に倒れ込む。乱暴な運転だなと思いながら、座席に座り直した。


 車は町の中を抜け、外に出る。建物がどんどん遠ざかり、緑に覆われた道になる。自動車は、島の東側の工業地帯に向かっている。


「次の試験だ」


 ギレルモはハンドルを握ったまま声を出す。


「今と同じ出力結果を、違う条件式を用いて述べよ」


 レオナルドは考える。先のコードの条件分岐は「三と五の倍数か」「三の倍数か」「五の倍数か」「それ以外か」でおこなった。


 ド・モルガンの法則を使えという問題か。ド・モルガンの法則は、論理積や論理和の否定に関する定理だ。

 レオナルドは、頭の中でプログラムを展開する。条件式の部分だけを変えて、答えを口頭で述べる。


  ……

      if (i % 15 != 0) {

        if (i % 3 != 0) {

          if (i % 5 != 0) {

            printf("%d\n", i);

          } else {

            printf("Buzz\n");

          }

        } else {

          printf("Fizz\n");

        }

      } else {

        printf("FizzBuzz\n");

      }

  ……


 レオナルドが述べたあと、入力したカルロスは、正解だとギレルモに告げた。

 バックミラーに映ったギレルモの顔は、相変わらずむすっとしている。本当は雇いたくないのに、仕方なく試験をしているといった風情だ。


 車の進む先に工場の立ち並ぶ様子が見えてきた。どれも町工場程度の小さなものだ。建物は海に近いものほど古い。徐々に工業地帯を拡張しているために、最新のものを島の内側に建てているのだろう。


「次の試験だ」


 工業地帯が目前に迫って来たとき、ギレルモが車を停めて口を開いた。嫌な問題の出し方をする。ここで間違って車を降ろされたら、長い距離を歩いて帰らないといけない。


「これまでと同じ処理を、最短で述べよ。リミットは五分だ」


 次はコードゴルフか。プログラムの文字を削り、短い文字数で書くプログラマの遊びだ。最短打数を競うゴルフに見立てたものだ。


 頭の中で、五分で短くするのは難しい。正答させないための問題だろう。

 しかしレオナルドは、コードゴルフの経験がある。そして、C言語のFizzBuzz問題の最短コードを知っている。


 七十三文字。ただしこの解は、利用している環境によっては正しく動作しない。たとえば、オンラインコンパイラのideoneアイディーイーワンでは不正解になる。そうした環境での最短コードは七十四文字になる。


 どちらが正解かレオナルドは考える。

 ギレルモの態度からして、七十三文字を答えたら不正解にするはずだ。少なくとも大学の友人で性悪のBBなら、そうした罠を用意する。


  main(i){for(;i<101;puts(i++%5?"":"Buzz"))printf(i%3?i%5?"%d":0:"Fizz",i);}


 一文字ずつ確かめながら、カルロスは入力する。


「確認できました。正解です」


 カルロスは驚いた顔をする。ギレルモは不満そうな表情を浮かべて顔を歪める。

 やはり、七十三文字を答えたら不正解と言うつもりだったのだ。その罠をレオナルドは回避した。


 ギレルモがアクセルを踏む。車は工場のあいだを縫っていく。道の先には、周囲の建物の数倍あるビルが見えてきた。

 近代的な建物の入り口には、メンデス・ロボット・ラボラトリという金属製のプレートが掲げてあった。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ