アジア地区予選レポート

というわけで11-12日の土日に行ってきましたよ。なお、月曜には企業見学があるのですが、私は実験があるので行くことができません。情報工学科(笑)。


12/11
渋谷経由よりちょっと高くなるけど日吉からそのまま連れて行ってくれるらしいので三田線直通に乗って眠いーしていたら、水道橋かあ、確か隣だったよな→神保町じゃないな、半蔵門線じゃないからちょっと遠まわりするのかな→全然着かないな→水道橋の前でした。反対向きの電車に乗って6駅…。ちょっと早すぎてたのでちょうどいい感じに着きました。まったく…。なお、id:chokudaiは迷子になっていた模様。
練習セッション。2問目・3問目で大丈夫なような大丈夫でないような様相を呈する。まあ大丈夫だろう。自分たちが勝手に母国語を話すのは構わないけど大会全体(アナウンスも問題も)が英語で行われるという世紀末っぷりで、英語担当(笑)。早速chokudai先生が説明を無視して後ろからお菓子とジュースを机に持ってきた。
Javaチャレンジ。1時間半のコーディング。前もって送られてきていた資料を全員でスルーしていたのでわろすに。chokudai先生ががんばってたけどなんかぶっ壊れてた。
歓迎会。立食パーティ。前もって送っておいたスライドで自己紹介をする。英語で(笑)。Team Introduction Document and Slidesとか2人がかりでスルーされ押し付けられていたので、とりあえずメッセに書かれていたことをそのままコピーして送っておいた。

Hey!
I’m chokudai!
Thank you!

I will win.

Team Introduction Documentは印刷資料として全員に配られている。みんなアスキーアートで埋めたりいい加減さが目立つ一方で、icp.javaの紹介文はまじめそうに目立っていた。みんなあんな感じならKDVの英語勢に頼んで校正してもらう必要なんてなかったね!!!

This team was formed 2 years ago. The first: icp.c, the second: icp.cpp,
and the third: icp.java. The performances of previous teams were not so
good; we failed to advance to Asia regional. However, on this contest,
we introduced Hokuto, well known as a sport action game.
It is no longer fighting game. It includes many bugs and infinite loops
such as basketball. We believe that everything goes well by Hokuto.
Thanks to it, we can now make full use of few chances and we are not
spoiled any longer. As a result, we had a good score in summer camp,
placing PS2 Hokuto disk beside.
Finally, it is only yappy that plays Hokuto eagerly.


12/12
8:40から受付、9:20からコンテスト本番と世紀末スケジュール。まあ始まったの9:49だったんですけどね。7時台とかバスはモリモリ来るだろうと思ってたらそれは平日の話で、日曜日はなんと20分に1本ということがバス停に着いてから判明しました。そういや土日の朝に急いで出かけることなんてほとんどなかったな…。が、がんばって日吉まで歩いてちょうどすぐ来た急行の三田線直通に乗ってガン待ちしてたら普通に間に合ったというかちょうどいい時間に着いた。またかよ。
コンテストルームには電子機器は持ち込めません→コーチとかに預けましょう→高田先生は体調を崩してお休みです><(昨日風の噂でノロウィルスにやられたとか言う話を聞いたと風の噂で聞きました)。わろっしゅ。
書籍・プリント類は持ち込み可なので私はEffective C++とプログラミングの魔導書〜Programmers' Grimoire〜を持っていきました。本当は夏合宿の時のように北斗のディスクを持っていきたかったのですが、KDVはもちろん、土曜日は学生団体への何かなんかがあって授業の無いI川さんが強制愚者でMMCからも持ち出すわけにもいかなかったので、世紀末言語の本で妥協しました。Javaを使うはずなのになんでC++の本なのかと他チームから突っ込みが入りましたが、C++を使うとしてもいろいろとおかしいです。
結果
http://icpc2010.honiden.nii.ac.jp/regional-contest/standing
早いですね。もう公開されてます。
どこも解けていない問題に構わず粘着し、CとJでFirst Accept*1を達成するという沸きを見せました。Jは私の仕業です。が、逆に言うと上位チームがよく解いていたDとかFあたりができてません。まあ、chokudai先生ががんばってくれればいいだけの話でしょう。Jはパーザのひどい実装ゲーで、手をつけるだけで相当の覚悟がいるというか沸いてる問題でした。計算量とは何だったのか。最終的に通したのは2チームだけでした。USAGI Codeは残り数分だか数十秒だかでこれを通し、見事10問パーフェクトを達成しました。やっぱり沸くと勝てないが、本当に勝つ人は最後に沸き切るんですね。BNFを見た瞬間沸き出し、stdoutのリダイレクトを消し忘れてWrong Answerを食らい(←これはいけません)、First Accept取って沸き切ってましたけどね。そこらじゅうにばらまかれたアサーションが光る。やっぱりICPCのコードじゃないよこれ。これを正解して得られた紫色の風船*2は、他の色とは趣の異なる妖しげな輝きを放っていました。
今回はまあこんなところでなかなかがんばったんじゃないですかね。あまり他ができていないところを意味不明な取り方してるあたりワンチャンあるように思う。一応Jはほぼノンストップで書いたつもりだけど結構時間がかかってしまったように思う。衰えたな…ユダ。あれやるくらいなら他2つできるんじゃないか疑惑もあるが、アルゴリズム考案時間をうまく埋めてやると他より1つ抜きんでられたりするんじゃないでしょうか。


タスク:1文字先読みの再帰下降パーザの作成 値は行列

  • 行列を変数に代入・読み出し
  • 2項左結合 + - *
  • 単項前置右結合 -
  • 後置左結合 '(転置) (expr, expr)(インデックス取り出し)
  • 行列を[1 2 3;4 5 6]のようにスペースで次の列、;で次の行を表すが、なんか行列の内部に行列を入れ子にできてイミフ
  • 行列の加算・減算
  • 行列の乗算(学校の宿題でやれ) 結果の行数と列数と要素ごとの式が混乱するでござる
  • 行列のスカラー
  • 行列の-1倍
  • 転置行列(trmtくんの課題で見たぞ)
  • よくわからないインデックス取り出し操作

要するに普通の数値計算式のパーザに加えて行列操作ライブラリをひたすら自作。計算量とは何だったのか。

*1:全チームのうち初正解。

*2:正解すると問題に応じた色の風船が机につけられ、公開される。