「日経ソフトウエア」には,毎年恒例の季節ネタがいくつかある。その一つが,高校生や高専生を対象として開催されるコンテスト「パソコン甲子園」(正式な名称は「全国高等学校パソコンコンクール」)である。今年で第4回を迎えたばかりの若いイベントなのでご存じない読者もいるかもしれない。インターネット経由での予選を経て,毎年秋に福島県の会津大学で本選が開催されている。今年は11月11~12日の2日間,デジタル・コンテンツ制作,CG制作,プログラミングの3部門で競われた。
プログラミング部門は,二人一組の25チームがプログラミングで得点を競う。チームごとにパソコンが1台ずつ与えられ,用意されている開発ツールだけを使ってプログラムを作成する。出題は1問あたり10~50点で15問。この15問を解くプログラムを制限時間4時間のうちにできるだけたくさん作り,500点満点で一番多く得点したチームが優勝となる。参考資料として紙の書籍は持ち込んで構わないが,書籍の付録CD-ROMを含め,デジタル・データは持ち込めない。もちろんインターネットへのアクセスもできない。2人の分担や問題を解く順序は原則として自由である。比較的やさしい10点や20点の問題をたくさん解いてもよいし,5個ある50点の難問を解いて高得点を狙ってもよい。
パソコン甲子園のように学校の外で思う存分プログラミングの力を振るって評価されるという場は,かなり貴重なのだそうだ。普通の高校生にとって,プログラムを書く能力を評価してもらえる相手は,せいぜい自分が通っている学校の先生くらいのものだからだ。これまでパソコン甲子園を現地で3回取材した同僚に聞くと,年を追うごとに選手のレベルが上がり,今年の優勝チームは,あわや全問クリアというところまで行った,とやや興奮気味に語ってくれた(惜しくも50点問題を1問だけ残した)。
パソコン甲子園の公式Webサイトに出題内容が公開されているというので,ダウンロードして眺めてみた。基礎を学んでいれば解決の見通しを立てられるような問題が多いが,4時間以内に解けるかというと自信がない。実際にこの制限時間はどれほどのものなのかと好奇心をかき立てられ,週末を利用して記者も問題を解いてみることにした。
食事や外出などいろいろな中断を挟みつつ,正味で4時間ぶんくらい費やしたと思った時点でクリアできていたのは9問,220点ぶんだった。延べでは8時間くらい経っているし,正確に時間を計れば,最後に解いた50点問題1問は解けていなかったかもしれないが,「仮に全部得点できていれば比較的上位のほう」だという。「仮に」というのは,本番では採点者が様々なテスト・データを入力して,きちんと仕様を満たしていることを確認できてはじめて得点となるためである。
優勝チームが残したという50点問題の「問14」は,プログラミング上の難問として有名な「巡回セールスマン問題」に似た問題で,ある条件下で最大15カ所を訪問する際の最適な経路を出力せよ,というものだ。「最大15カ所」という設定が絶妙で,すべての組み合わせを力ずくで計算する方法では時間が掛かりすぎて実用にならない(13カ所程度までなら数分程度で解けるが,1カ所増えるごとに所要時間が10倍単位で増えてしまう)。記者は時間内に手を付けることすらできなかった。改めて取り組んでみたが,結局,根本的な改良策は思いつかず,ただの力ずくで解くバージョンに小手先の細工をいくつか施して,2倍速いバージョンができたところで満足してしまった(要するにあきらめた)。
これらの問題を解いたところで,インターネットやデータベースを駆使した今ふうのかっこいいソフトウエアができるわけではない。まして,作ったものが誰かの役に立つわけでもないのだが,純粋な趣味でできるプログラミングほど楽しいものはない。同僚との雑談から軽い気持ちで始めたら,週末をつぶしてもおつりが来るほど楽しんでしまった。
雑誌の編集をしていると,ともすると新しいもの,高度なもの,流行っているものに目を向けてしまい,プログラムを書いた・動いた・楽しい,という素朴な喜びはなかなか顧みることがない。しかし,5年後,10年後に芽を出す才能は,今このような面白みを味わいつつプログラミングの腕を磨いているに違いない。パソコン甲子園は,記者にとっても年に1回それを思い出させてくれる貴重な季節ネタである。