]>
<< Python Challenge(5, 6) | main | 就職決まりました >>
アメリカのプログラミングコンぺ、TopCoderに参戦してみました。TopCoder内ではいくつかの競技があるようですが、僕が参加したのはAlgorithmという制限時間内に問題を解き早さを競うというものです。三問出題され、それぞれ早く解けば解くほど高い点数がもらえ、参加者全員に点数に応じたレートがつけられます。使用できる言語はJava、C++、C#、VBですが、基本的にプログラムの速さは得点に関係ありません(でも1入力に2秒以上かかるものは遅すぎるのでアウト)。とにかく早く提出するのが全てなので、得意なもので書けばいいと思います。僕はJavaです。全然得意じゃないですけど。
まず、参加者は大きく二組にわけられます。それまでのレートが1200以上の人はDiv1、それ以下や初参加の人はDiv2。僕は初参加なのでDiv2です。当然こちらのほうが問題もやさしい。レートはDivisionの中の相対評価でつけられるようです。
それぞれのDivisionで、さらに20名ずつのグループにわけられます。競技はこのグループの中で行われることになります。問題は三問(それぞれ250点、500点、1000点)。最初の75分でこれらを全て解きます。休憩をはさみ、15分間でグループ内の他人のコードを見てその間違いを探します(他人のミスを見つけるとポイントがもらえます)。ここで競技は終了となり、各解答に対してシステムのチェックが入ります。これに無事パスすると正式にポイントが与えられ、レートがつけられます。
250ポイント問題
文字列を検索する系。
5分くらい。230ポイント獲得。
500ポイント問題
二円の交点の数を求める系。
8分くらい。410ポイント獲得。
1000ポイント問題
ワードパズルみたいなもの。
一時間以上考えた。例示された入力に対しては正しい答えが返せるが、メソッド内で再帰していたためワーストケースどころかちょっと長い入力に対してはタイムアウト。とりあえずぎりぎりにダメもとで提出してみた。420ポイント獲得。
The Challenge Phase
他人のバグ探しをする時間。ここが一番楽しかった。バグをみつけたらそれを誘発するようなテストケースを作成して送り込んでやる。うまく行けば+50ポイントで相手のポイントは帳消しになるが、失敗すると-25ポイント。この撃墜も早いもの勝ちだ。とりあえず1000点問題については自分の解答がタイムアウトすることがわかっていたので似たようなものがないか探す。再帰してるヤツがいた!しかしその解答に対してタイムアウトする入力を作っている間に他の人に撃墜されてしまった。メインの画面に戻ったら、僕の1000点問題も撃墜されていてワロス。-420ポイント。最終的に一つバグを見付けて撃墜。50ポイント獲得。解答者は日本人の方でした。でも戦場だから!
The System-Testing Phase
競技が終った時点で690ポイントくらいだったのだが、システムチェックで500点問題が落ちた…。500点問題は作っている途中に穴に気づいたのでそれを埋めて、Challenge Phaseでも二人の攻撃を弾いていたので大丈夫だと思っていたが甘かった。-410ポイントで最終的な結果が280ポイントと大変残念なことになってしまいましたが、それでもなんとかDiv1にいけるくらいのレートがつきました。250ポイント以下は団子になるので、それをわずかに超えていたことが幸いしたのでしょう。しばらくDiv1に居られるように頑張りたいと思います。
http://www.panopticon.jp/mt/mt-tb.cgi/85
コメントする