【宣伝小説】 もしゲームクリエイターを目指す少年が『プログラミングコンテストチャレンジブック』を読んだら



――お前に借りたC言語の本、読んでみたんだけどさ
――そうか、まるで理解できなかったか。想定範囲内だ
――まだ俺、何も言ってないんだが
――違うのか?
――……違いません
――それで、具体的には何がわからない?
――いや、具体的にどこが、ってわけじゃないんだけどさ
――なるほど。つまり、画面に“Hello World”と表示するプログラムが書けたはいいが、だから何だ。本の終わりまでパラパラと眺めてみたが、最終的に普段遊んでいるようなゲームが出来上がるとは到底思えない。達成感がないから、勉強もはかどらない。目的意識が希薄だから、覚えたこともすぐ頭から抜け落ちてしまう。という悩みか。理解した
――……お前、エスパー?
――興味本意だけで『ゲーム作りたいからプログラムの勉強をする』などと言う輩の大半が、まずぶつかる壁だ
――へえ、俺みたいな奴って結構多いのか
――最初は無味乾燥で当たり前だ。僕としては、そんなことで悩んでいる暇があったら、とにかく勉強を進めてみろと言いたい
――やっぱり、そうするしかないのかな
――いきなりGUIプログラミングから入るという手もあるが、あまりお勧めできない。まったくの素人がそれをやると、基本的な技術を会得しないまま、汎用性のない知識ばかり覚えこんでしまって、応用の効かない人間になるのがオチだ
――わかったよ。甘えてないで、もうちょっと踏んばってみる
――とはいえ、良い手がないわけでもない。少し遠回りになるがな
――手があるのか?
――『競技プログラミング』という言葉を聞いたことはあるか?
――初耳です。説明お願いします
――了解しました。それでは、説明が面倒になった龍之介様に代わって、いつもの通り、メイドちゃん講座を始めさせていただきますね
――わかりました
――ゲームを作ったり、数学の問題を解いたり、会社のシステムを設計したり。何でもできる“広義”のプログラミングとは違って、ごく限られた、マニアックな領域でのみ活用できるプログラムを組む行為のことを、“狭義”プログラミングと言います。まずはここ、理解できますか?
――まあ、なんとなくは
――納得しちゃダメですよ(笑)。これ、わかりにくいジョークですから
――どうしろと……
――では、気を取り直して。先ほど『数学の問題を解いたり』と言いましたが、空太様が普段学校でなさっているような『与えられた問題に答えを出す』行為を、紙に書いてではなく、プログラムを組むことによって行うのが『競技プログラミング』です。具体例を挙げましょうか。例えば、『可愛い可愛いメイドちゃんの銀行講座には、現在預金がa円あります。そこへ空太様が、授業料として新たにb円振り込んでくださいました。さて、メイドちゃん講座の預金は、合計いくらになったでしょう?』という問題。さあ空太様、答えはいくつになりますか?
――え? 講座ってそっち? てか、これって金取るの?
――細かいことを気にしてはいけませんよ? 空太様(はぁと)
――……a+b円です
――大正解! いくら空太様でも、このくらいのことはわかるんですね。少し見直しちゃいました。メイドちゃん感激です
――…………
――冗談はこのくらいにして。今の問題の場合、『aとbという値を入力して、答えであるa+bの値を出力するプログラム』を書けば、この問題を解いたことになります
――ああ。確か、赤坂から借りた本の3章に、そんなプログラムが載ってたな
――ええ。さらに、競技プログラミングの各種大会では、こういった問題を『制限時間内に』解かなければならないという条件がつきます。もちろん、自分の意図した通りのプログラムを正しく書けなければお話になりませんので、素早く正確なプログラムを書く練習にはもってこいなんですよ
――ふぅん。つまり、学校のテストみたいなもんか?
――その例えは適切です。普段は鉛筆を使って日本語で回答しているところを、キーボードを使ってプログラミング言語で回答するだけの違いですね
――だいたいわかった、と思う。でもさ、それって本に載ってる例題とか章末問題を、時間計って解くのと何が違うんだ?
――いい質問です。先ほど空太様は、達成感がないから勉強がはかどらない、とおっしゃいましたよね?
――言ったのは赤坂だけどな
――だったら競技プログラミングはもってこいです。プログラミング言語の教本に載っているような問題なんて、だいたいどれも無味無臭で、素人の方は『これが解けたからって何なの?』と思ってしまうのも無理はありません。その点、競技プログラミングの問題文は、なぜだか妙に凝ったものが多いんですよ。具体的な例を見てみましょうか



そう言うと、メイドちゃんはいくつかのアドレスを示してきた。
クリックして、リンク先のページに飛ぶ。画面に、その問題文とやらが表示される。
ただし、それは空太の想像とはだいぶ違っていた。「城の地下倉庫に宝石を置いて戻ってくる」だの、「一度通ると割れる薄氷マスの上を進んでいく」だの、「勇者が瘴気に汚染された大地を避けるように歩いて伝説のクリスタルを集める」だの。これでは問題文というより、まるで……。


――ゲーム、みたいだな
――はい。そしてその『ゲーム性』こそが、競技プログラミング最大の魅力です。問題文の雰囲気だけではなく、問題の内容そのものも、まるでRPGの敵キャラクターのように多種多様。使う武器はあなたの頭脳! 様々なアイテム(アルゴリズム)を駆使して、定められた時間内に敵を倒せ! 一見すると倒せない強敵にも、ちょっとした機転で弱点が見つかるかも!? ……とまあ、例えるならこんな感じですかね
――なんだか、面白そうに思えてきた
――使い古された言葉を借りれば、『遊びながら学べる』というやつですね。今なら、月に3回ほどの頻度で、オンラインの競技プログラミングコンテストを開催しているサイトもあります。参加費は無料で、誰でも気軽に楽しめます。それこそ、無料オンラインゲームのようなものだと思っていただいても構いません。そこで世界中のライバルたちと競いあい、自分のレーティングを上げていく。これで達成感がないわけがありません。『問題を解くため』という明確な目的があれば、勉強したことも頭に残りやすいですしね。もしも世界大会まで勝ち残ることができれば、タダで海外旅行に連れて行ってもらうこともできますよ? もちろん、そこまでの域に達するのは生半可なことではありませんが
――まさに至れりつくせり、って感じだな
――ゲームクリエイターになるのに、競技プログラミングの経験は必ずしも必要ではありません。それでも、基本的なデータ構造やアルゴリズムの知識、実行時間や必要メモリ量を見積もる力、そして何より、呼吸をするように自然にプログラムを書く習慣は、身につければ一生の財産になるはずです。少なくとも、今のまま手をこまねいているよりはずっといいと思いますよ。以上、とってもわかりやすいメイドちゃん講座でした
――ありがとうございます。大変参考になりました
――というわけだが、どうする? 試してみるか?
――ああ、頼む。赤坂
――そう言うと思って、既に部屋の前に本を置いておいた
――相変わらず手際のいいことで
――競技プログラミングで使う知識や考え方を、基礎から網羅的にまとめた本というのは意外と少ないのだがな。つい最近、良い本が出版された。僕のお勧めだ。それを貸してやる
――サンキュ



早速、部屋の外に置かれた本を取りに行った。
そこには、表紙に蟻の絵が書かれた本が1冊だけ置かれていた。


プログラミングコンテストチャレンジブック

プログラミングコンテストチャレンジブック



こうして競技プログラミングを始めることになった神田空太は、いくつかのコンテストに参加するうちに、めきめきと実力を伸ばしていった。


その結果、空太は『とれいん・とれいん(仮)』というゲームを思いつき、そのルールを「暇つぶし感覚でゲームを遊ぶライトユーザー層」にも楽しめる難易度であると盛大に勘違いしたままプレゼンをする羽目になるのだが……。


それはまた、別の話。



参考文献



さくら荘のペットな彼女 (電撃文庫)

さくら荘のペットな彼女 (電撃文庫)