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

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

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

エラーが発生しました。

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

ブックマーク機能を使うにはログインしてください。

競技プログラミング漫画にありがちな展開

作者: 梅津高重

一時期、ちょいちょい見かけた大喜利ネタ、「○○漫画にありがちなこと」。そういや、競技プログラミングを題材にしたバトルマンガって意外と見かけないな、とふと思って考察してみた。

【前回までのあらすじ】※「前回」は架空のネタです。作者は書いていません。

 主人公らの次の対戦相手は、他人のキータイプの気配を読んでそれを一瞬早く再現するという最凶最悪の必殺技の使い手だった。 チームメンバーは無し。たった1人の変則チームで戦う彼女は、 並み居る強豪チームを、全く同じソースコードを一瞬早く完成させるという荒技で打ち負かし、ここまで勝ち進んで来た。 主人公らは、その最強ライバルの戦績を分析し、正攻法で挑むことを宣言した。 すなわち、最後のEnterを気配からコピーされる前に入力するという力技だ。


 プログラミングは全て主人公1人に任せ、それ以外のチームメイトは最後のEnterキーの入力のみに集中する。 数人がかりでキーを叩くことで判断遅れの影響を排除した上、キーの押下速度の限界を超えてタイムラグを最小化する戦略だった。 完璧な統制をめざし、チーム一丸となって対戦日までの短い時間をEnterを押す特訓に費やす彼女たち。 そして、対戦の日が訪れる……。


【決戦戦】

「さぁ、これは不思議な対戦になりました!1人で悠然と待ち構えるライバルチーム。これに対する主人公チームの異様な布陣!主人公1人がホームポジションに構え、残りのチームメイトは全員が右下のEnterキーに指をおいている!!」


 注目の対戦を見るべく大観衆が集まったスタジアムに実況の声が響いた。

 観客席で主人公の勝利を案じるヒロインは、不安を隠せない面持ちでつぶやく。


「こんな単純な作戦で本当に勝てるんでしょうか?」

「さぁな。だが、すでにあらゆる作戦は試されている」


 ヒロインの隣で会場を見つめる、主人公の恩師は答えるともなく言った。


「ソースのコピーを反則として訴え出たチームもあった。コピーは明確に禁止されているからな。だが、彼女の気配を読む技は想定外だ。あいつらは……」


 恩師は観客席の対面にちらりと目を走らせた。そこには歯ぎしりしつつライバルを睨み付ける一団、前回の対戦で彼女に負けたチームが座っていた。


「わざとその問題に対してあり得ないプログラムを入力する戦略を採った。 合理的なアルゴリズムなら、似たようなソース、極端なところでは、全く同じソースになることも無いとは言い切れないからな。 しかし、全く意味不明なプログラムであれば、内容が重なることはあり得ない。 そうして、あいつがコピーしたとしか解釈不能な状況を作り上げ、反則に追い込むつもりだった。 が、精密な測定の結果、彼女の方が早くキーをタイプしていることが証明されてしまった。 そうなった以上、騒ぎ立てれば自分たちの方がコピーしたと逆に訴えられかねない。 彼女のあくまで偶然だという主張を受け入れざるを得ないのさ。 結局の所、気配を読んでコピーする技が使われたと立証できなければこの戦略は使い物にならない」


 恩師は別の敗退チームへ視線を移した。


「入力を偽装する方法も効果が無かった。彼女らは、キーを叩くが、スイッチが通電する寸前で止めることで入力したふりをするという技法を極めた上で勝負に挑んだ。 しかし、結果は、効果無し。 その戦略を察した彼女は、通電が確認出来てから一瞬遅れで入力する方法で、偽装を完全に回避した。 何しろ、最後のEnterさえ先に入力を終えられれば、勝ちは揺るがないわけだからな。途中経過はどうでも良いのさ。 結局、彼女の気配を読む技の精度が我々の想像を遙かに超えていることを知らしめただけだった……」

「勝てるんでしょうか……?」


 不安を隠せない面持ちで言うヒロイン。


「さぁな……。結局は、正攻法、相手より早く最後のEnterを押すで攻める以外に方法は無い……、それがあいつらの結論なら、私たちに出来るのは見守ることだけだ」


 2人の間に重い沈黙が流れる中、勝負は、静かなブザーの音で始まった。


「さぁ、始まりました、この注目のカード!」


 興奮した実況の声が会場に流れる。主人公の叩くキーの音が軽快に鳴り響く。


「間髪入れずに猛然たる勢いでプログラムの構築を始める主人公!対するライバルも負けていない!!」


 ライバルもまた、キータイプをスタートしていた。


「限りなく真っ黒な灰色と議論を呼んでいる、このライバルの手の動き!やはり、全く同一だ!!diffなんてかける必要はない!!一目瞭然、1ビットのズレも無い、全く同一のソースコードが組み上がっていく!!」


 一心不乱に入力を続ける主人公。最後の瞬間を逃すまいと身を固くするチームメイト達。 彼女らのブースを包み込む緊迫は、その入力1バイト毎に倍加されるかのようだった。

 固唾をのんで見守る会場全体。 そこをひたひたと支配していく、実況すら一言も発することが出来ないほどの、異常な緊張感。

 空気の堅さすら感じられそうな静かな会場に流れる、シンクロした2つのキータイプ音。 しかし、それらの全ては、勝負の行く末に一切の影響を与えない。 ただ1打鍵、最後の1打鍵をいずれが早く入力するかのみが勝敗を分けるのだ。 それ以外の全ての1バイトで主人公が先行出来たとしても何らの慰めにもならない。 最後のEnterが一瞬でも遅ければ、それまでの勝ち分は完全にチャラになってしまうのだった。

 やがて主人公のタイプに「}」が増えてくる。 それは、1回入力される毎に1つのブロックが完成したことを意味し、その増加は作業の終わりが近づいていることを予感させる。

 インデントが2つ減り、1つ増える。 そのたびに、スタンドを埋め尽くす大観衆のうめきが共鳴し、スタンド全体が唸りを上げているような錯覚に囚われる。 やがて、インデントが1段になった。 観衆が息をのむ音の大合唱。

 主人公が「r」をタイプする。 会場の空気が変わった。 超高速のタイピング合戦の最中、次の打鍵を待つ一瞬、観客らはあり得ないもどかしさに確かに身もだえた。 流れるようにタイプされたreturn まで、 現実にはその刹那に何かを思うことは不可能だったはずにもかかわらず。

 ライバルは淡々とタイプを続ける。

 残るは、リターンコードの「0」を入力しmain関数を締めくくるだけであるという誘惑に負けるような彼女ではない。 未定義のままにしてある関数の類は無かったが、この後に関数呼び出しが続く可能性がまだ残っている。 己のタイプスピードに絶対の自信のあるライバルは、徹底的に確実な手段を採るのだった。

 大幅に先行する必要は無い。勝つのは最後の1打鍵だけで良い。


 そして、その瞬間が訪れた。


 完全に1個の有機生命体と化した主人公のチームメイトらの指先が一斉に動く。

 観客たちが、主人公がプログラムを書き上げたことを理解したのは、それに一瞬遅れてだった。

 樹脂が持つ慣性をはじき飛ばし、全身の力が込められ重なった指がEnterキーを設計上あり得ないスピードで押し下げていく。


「ひっ!!」


 緊張に耐えきれなくなったヒロインの小さな悲鳴。

 観客全ての目は、2チームのプログラムの動作状況を示すプロセスモニタに注がれている。


 『ターン!!』


 会場に響く、勝敗を決める打鍵音。

 先に動きがあったのは、ライバル側のモニタだった……。


「ライバル選手が先んじたっ!!!」


 語らぬ事が全てを語る、と言わんばかりに沈黙を守っていた実況が、ついに絶叫した。


「猛然たる勢いで計算が進んでいる!!」


 ライバル側の状況を示すプロセスモニタは、真っ赤に染まり、恐ろしい速度で計算が進んでいることを誰の目にも明らかに示していた。


「えっ?!……し、しかし、これはっ?!!」


 実況の言葉が止まる。あまりの事態に二の句が継げないことが、混乱した口調に如実に表れていた。

 主人公チーム側のプロセスモニタは、真っ黒の沈黙を守っていた。何も実行されてはいなかったのだ。

 その間にも計算を続けるライバルプロセス。 プロセスモニタを見上げる全ての人間が、そこに表示された状況を理解出来ずに居た。

 例外は、この状況を作り出した主人公チームだけだった。 状況の主たる彼女らだけは、まだ戦っていた。


「そうかっ!!」


 恩師が小さく叫んだ。


「あいつらは、最後のEnterを先に押そうとしていたんじゃない!押さないつもりだったんだ!!」

「え?」


 主人公はタイプの手を緩めず、猛然とソースコードを入力していた。


「この瞬間、この空気を作り出す事こそが、あいつの策略だったんだよ!Enter早押し練習をこれ見よがしに喧伝したのは、それしか作戦が無いと思わせるためのフェイク、 あの大げさなEnter押し体勢は、押したふりを隠すための布陣だったんだ!!」


 脇目もふらずにキータイプを続けている主人公。

 やがて、出力を表示する巨大モニタのライバルチーム側に「(´・ω・`)」の顔文字が表示され、ライバルプロセスが終了した。 それを指出して恩師が叫んだ。


「さっき入力していたプログラムは、実行しても無意味な結果しか出力されないダミーだったんだ!そして、ライバルが、勝ったと思って手を止めている間に、新たなプログラムを入力する。 今、あいつが改めて入力しているのが、本命、真の求解プログラムなんだよ!」


 一瞬の沈黙の後、会場が歓声に包まれる。


「で、でも、ライバルの押したふり対策は完璧だってさっきおっしゃってませんでした?」

「いや、違う。完璧にはなり得ない。 こちらが入力したのを確認してから入力すれば良い場合、ライバルが押したふりに引っかかる可能性は0だ。 だが、どんな方法を使っても、対策できない瞬間が1回だけ存在する。そう、最後の打鍵だ。 何しろ、ライバルの方が絶対確実に先にタイプをするんだ。その瞬間、こちら側はまだタイプを完了していないんだから、ライバルの入力を確認してから入力をやめる事が可能だ。 この戦略から逃れることは、ライバルには原理的に不可能なんだ!」


 興奮を抑えきれず、まくし立てる恩師。

 恩師より先にそれに気付いていたライバルは、既に端末に向かって作業を進めていた。


「トリックに気付いたライバルが、慌てて途中からコピーを始めても完全なプログラムにはならない。あいつの完全な作戦勝ち……なんだとっ!?」


 ソースコードが表示された大スクリーンを指さした恩師が絶句する。 ライバル側には、主人公のものと全く同じソースが出現しつつあった。


「確かに一瞬、手を止めていたはずだぞ!!その間の気配ですら後から再現できるっていうのか!?」

「こ、これはっ!!全く同じだ!!主人公が入力したのと寸分変わらないソースコードがライバルのエディタ上に再現されている!!何という技術!」


 実況が叫ぶ。


「しかし、主人公のもくろみも完全に外れたとはまだ言えない!!入力を開始したのがいくらか早かった分だけ、主人公が先行している!追い上げるライバル!勝負はタイピングスピードで決まるが……これは、猛追が速い!!このままでは難なく追いつかれそうだ!万事休すか!?」


 先ほどの冷戦とは打って変わって大歓声が鳴り止まないスタジアム。 主人公が目にもとまらなぬスピードで2文字タイプする間に、ライバルは3文字タイプして見る見る追い上げて行く。


「2人のデッドヒート!しかしこれはなんだっ!?」


 実況が言うとおり、それは異様なソースコードだった。 インデントも改行すらも無く、変数名は全て1文字。 一見しても、じっくり理解しようとしても何をするコードなのか全く理解が追い付かない。 そこには前半戦で主人公が作成した、お手本のように綺麗なコードとは打って変わった難読コードが紡がれていた。


「コードゴルフか!!」


 恩師が膝を叩く。


「コードを限界まで短くして、追いつかれる前に終えるつもりだな!比較的簡単な問題に対して、特殊な技法を最大限に駆使したプログラミングでコードの短さを競う競技、コードゴルフ。それをこんな難問を解くのに持ち込むとは、なんて奴だ!!」


 思わず身を乗り出して拳を握りしめる。


「さっきの一目見て何をやっているか理解出来る異様に綺麗なコード、あいつにしてはおかしいと思ったんだ。この本番とのギャップで逃げ切る作戦だったんだな!」


 ライバルの額を伝って汗が流れる。 難解なコードは、完成までの残り量が全く予想できない。 一体いつ勝負が決まるのかが分からない緊張感の中、それでも勝利の可能性を信じて追撃の手を緩めない。


「だがしかし、ライバル選手の猛追も凄まじい!主人公選手のアドバンテージはみるみる減っていく!果たして逃げ切ることは出来るのか!!」


 実況が叫ぶ中、最後の一瞬は、何の前触れも無く訪れた。


 『ターン!!』


 再び、会場に響く打鍵音。残る残響。今度こそ、それはほぼ同時に鳴り響いた2つの音のハーモニーだった。


 表示が切り替わるライバル側のプロセスモニタ。 主人公側のモニタは、それに一瞬遅れた。


「くそっ!!」


 絶句する恩師。


「決着!!ライバル選手、追いつきました!!一瞬早いプロセスの投入に成功!!主人公選手の逃げ切りは叶わず!!」


 実況の絶叫。


「だめ……だったか」


 うなだれる恩師。


「全く同じ性能の計算機である以上、全く同じ時間だけ計算して、先に動いた方が先に終わる……」


 ぎりぎりの接戦の決着が付いたことに、会場にはどよめきが広がっていく。 最後の打鍵の後、両手を挙げて固まっていた主人公。 もはやそれはお手上げのポーズにしか見えなかった。


 しかし、その両手が、ぐっと握りしめられた。


「えっ!?」

「バカなっ!?」


 恩師とライバルの声が重なる。

 主人公の姿勢は、もはや完全にガッツポーズだった。


 プロセスモニタ上ではあり得ない事が起こっていた。


 みるみる失速するライバルプロセスと、順調に計算を進める主人公プロセス。 最初にあった一瞬の差など、もはや誤差未満でしかなかった。 そこには既に圧倒的な差が付き、それはどんどん広がっていた。


「一体何がっ!?」

「さっきはちょっと立て込んでたのでツッコミ入れ損ねたんですけど……」


 身を乗り出す恩師に答えたのは主人公だった。


「最初に入力したのは無意味なダミーじゃなくて、トラッププログラムですよ」


 不敵に言ってのける。


「し……しまったアル!!」


 その一言に、全てを理解して歯ぎしりするライバル。


「信じられない事が起こっています!!一体何がどうなっているんでしょうか!?」


 実況が観客全ての問いを代弁した。


「実況さん、おっしゃいましたよね、最初のプロセスの時に。猛然たる勢いで計算が進んでいる、って」


 答える主人公。その表情はモニタの影に隠れて見えない。


「あれは無意味な計算をしていたんじゃないんです。最大限効率的にメモリを浪費していたんですよ」

「そ……そうか!」


 全てを理解した恩師が再び膝を叩いた。


「種がバレないよう念には念を入れて、いちおう、本物の求解プログラムにしてあったんですけどね。 効率が悪いから普通はやらない方法です。多分、もう4桁ぐらいメモリの量が多かったら、数年ぐらいで解が求まると思いますよ。 そうじゃなかったら、メモリ不足でエラーメッセージを出して中断します。 もちろん大量のスワップアウトが起こっちゃいますから、システムの性能が大幅に低下しますね。 低下は一時的なものですけど、間髪入れずに別のプログラムを走らせたら、その実行速度は顕著に影響を受けます」

「だから、最初、らしくもなくあんなに分かりやすいコーディングをしてたのか。 内容を吟味されても、トラップではなく正しい求解プログラムだと思わせるために」

「ええ。トラップの効果が消えない間に終わらせなきゃいけなかったから、本番はちょっと本気を出しちゃいましたけど」


 恩師の問いに、にやりと答える彼女。


「ともあれ、押したふりに引っかかった時点で、あなたの負けは確定したんですよ」


 彼女が立ち上がり、びしっと指さした先では、ライバルが呆然とうなだれていた。

Twitterで「#競技プログラミング漫画にありがちな展開」のハッシュタグを付けて大喜利化した時の纏めは以下。

https://posfie.com/@miyayou/p/K4tF5Fs


評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
感想はまだ書かれていません。
感想一覧
+注意+

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

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ