パソコン甲子園参加記 - 「日本一である必要は何なのか、3位じゃだめなのか」
だめです。賞金の額が違います。
チームと結果
プログラミング部門P04、筑波大学附属駒場高等学校、チーム名「18.039リットル」。
三位。
なお本校から本選出場したもう一つのチーム、「rand()」は優勝。
id:JAPLJのところは準優勝。
上位3チームがなんかデジャヴってるけど、おそらく気にしたら負け。
パソコン甲子園とは
高校生が二人で実装ゲーのアルゴリズム問題を猛速で解く。ちょっとICPCっぽい。賞金が高い。会津大学が主催。
デジタルコンテンツ部門では主に動画コンテンツが提出され、評価を競う。てかクオリティーやべえ。
予選
略
本選
行き帰りに土日きっぷを使った。9000円で乗り放題(中高生)とか安い。会津若松は遠い。
着いて開会式してすぐ試験開始。4時間11問。
1から交代で解き進めてく。
途中までダントツだったけどid:JAPLJが加速したりする。
11を読んだのが終了30分前とかいう大変な失態を犯す。ただのDP。パソコン甲子園のDPはDPが本質である場合が多いのでわかれば簡単らしい。
結局30分で実装完了しなかった。あと5分あれば実装できた。あたしは死んだ。スイーツ。
500点満点で、rand()が375点、life=NULLが360点、僕らが300点だった。11ができてれば変わってたと思うと悔しくてむしゃむしゃしちゃう。
あと1番のソース綺麗に書いたで賞の副賞が銅賞と同レベルであることが発覚。もっと綺麗に書けばよかった。SuperConで奨励賞とったの僕だし。
「短くて読みやすいのがいい」というようなことを言っていたけれど、最近の良いプログラミング言語で意味通りに書ければぶっちゃけ自然とそうなると思う。Pythonとか。
懇親会
僕の苦手な立食パーティー。
各チームの自己紹介が行われた。
最初が僕のチームとrand()で、gdってしまい会場の空気がgdった。ごめんなさい。
その後「ヒナギク is my wife」などといった俺の嫁宣言が流行し、会場の空気が痛くなった。
デジタルコンテンツ部門の紹介になったあたりで真面目な自己紹介になり、空気が綺麗になった。めでたし。
学校見学
何故かSolarisのワークステーション体験があった。ぶっちゃけUNIXとか興味ない人は全く興味ないし興味ある人は速攻でslをインストールするくらいの腕前は持ってるから意味ないのではないかという疑問がわいた。時間殆どなかったし。
JAISTと並んで、会津大学といえばミラーサーバーというイメージがあるが、コンピューター系の大学としてもいろいろ成績をあげているので、今後もPRしていってほしい。ちなみにICPCで49位だったらしいよ。
デジタルコンテンツ部門
どう考えてもデジタルコンテンツ部門すごすぎというか、彼らは夏休み返上して必死で凄いコンテンツを作っているというのに俺らときたら…
とにかく、デジタルコンテンツ部門が本命であることがよくわかった。というより、もっと評価されるべき。
おそらく作品は公開されるから、みんな見てみるといいと思う。
思ったこと
問題解く大会って見てて面白いかというとそんなことは無いと思うのだけど、解けた問題に応じて風船でビジュアライズしたり、いろいろ工夫しているのはとても良いと思った。
一つ不満があるとすると、他の大会に比べると問題の質というか、問題のありがたみが落ちる。四角に切れがそのまま問題になってたり。
「皆さんに完答されないように苦労しています」という言葉が「実装が重くなる」「問題数が多くなる」だけの意味にならないのを願うかぎり。
まあ多くの問題を解くことがこの大会の特色だからある程度は仕方ないんだろうけど。
あとは、何というか妄言に近いけど、問題を解くプログラミング大会もいいけれど、デジタルコンテンツ部門と並べるなら、むしろU-20のように創作プログラムで競う場があってもいいと思う。学生科学賞のICT部門が無くなった今、U-20以外にそういう能力を発揮できる場が思いあたらない。
来年に向けて
来年は最強の学年が去るので、id:JAPLJと二人で優勝争いができる!
と思ったんだけど、semiexpこわいよ…
今年の反省としては、
- 1番のソースコード綺麗だったで賞で本気だすことにした。
- 半分くらい経過した時点で読んでない問題が無いようにしたい。
というのがある。
あと誰をペアにしようかな。彼に頼むか。
問1
じゃんけん判定。やるだけ
問2
forとbreak。やるだけ
問3
DFS。
問4
8進数。
問5
全部調べる
問6
やるだけ。実装重い。
問8
各頂点を(c+1)個に複製してDijkstraする。
問10
幾何。幾何には手を出さないほうがいいって言うのに……
問11
中継地点の集合が与えられる問題。簡単だったのに。
複数のn番目の中継地点が与えられたとき、n+1番目の中継地点に辿りつくまでの最短距離は簡単にDPで求まる。
例えば、右下に進む場合の最短距離は、左上からDPすればよい。上と左のデータを参照して少ないほうに1を足す。
これを他の4方向について別々の盤面でDPし、最後にminで合成すると求まる。
この処理を5*5=25通り繰り返せばよい。