Google Code Jam 2003

Do you have exceptional programming skills? Can you make computers perform like silicon puppets with just a few well-expressed commands? Are you at ease when faced with a hard stop and a group of peers evaluating every line of your code? Here’s your opportunity to display the grace of the true professional in a reward-rich environment.
(優れたプログラミングスキルを持ってる? ちょっとしたコマンドだけでコンピュータを人形のように操ることができる? プログラムを強制停止させて、自分のコードを1行づつまわりのみんなに診断されても平気でいられる? これはあなたの真のプロ技術を発揮する賞金付きのコンテストだ。)

先週末にかけて行われた Google Code Jam 2003、いわゆるプログラミングコンテストに参加してみた。

概要はこんな感じ。

参加者は登録をすませたあと、決められた期間の間にArena と呼ばれる Applet/Java Web Start のツールを使い開発を行なう。 Arena では開発者どうしのチャットや、コンテンスト問題の表示とコーディング、限られた時間でテストまで済ませるのでそのためのカウントダウンといった機能が実装されている。

使える言語は Java, C++, C#, VB.NET 。 どの言語を使用しても得点には影響なく、問題ごとに使う言語を変えてもいい。

テストエリアへ入室直後にカウントダウンが始まり、問題を見てArena備えつけのエディタにプログラムを書き、Compileボタンを押すと自分のコードがサーバへ送られてコンパイルされたあと結果が表示される。

コンパイルが終わったコードはテスト問題に書いてあるテストケースや自分でテストケースを作ることで結果が正しく返ってきているか試すことができる。 ラインデバッガのようなものは付いていない。 テスト結果などからこれでOKだと思ったところで Submit し、自分の解答を提出する。 1度Submitするとその後はコードの変更はできない。

問題のウインドウを開いたときから(だと思うが違っているかも)Submitするまでにかかった時間によって点数が付けられる。 プログラムの実行スピードや、メモリ効率といったところは評価対象にならない。 目的のことをやりとげるコードをいかにして早く書くかというところに重点がおかれたものだ。 最後に、用意されたシステムテストをパスすることで実際の得点になる。 そのため、適当なコードを早く書いてSubmitしても0点になってしまうだけだ。 (Qualification Round ではなかったが、Challenge Phase という段階では、参加者がライバルのコードをチェックし、うまくいかなさそうなテストケースを試すことでライバルのコードを潰す時間も用意されている。 ここでもシステム出した答えと違う結果が返ってくると 0点になってしまう。 うまく相手のコードを潰すと自分に 50点もらえるが, 失敗すると逆に 50点減点になる。)

予戦問題は全部で2問、250点満点の問題と1000点満点の問題だ。 もちろん1000点の方が問題は難しくなっている。 この2問を1時間の間に解かなければならない。
と、こんな感じだったのだが、結果は玉砕。

250点の問題を25分ほどかけてSubmitし、134.33点。 1000点の問題はコーディング途中で制限時間がきてしまったため 0点。 250点の問題はシステムテストを通ったため、最終得点も134.33点。 残念ながら上位500人に入らなかったため次のラウンドに進めなかった。 どういう基準かわからないが Rating は 1347 とのこと。 (0-2200+ という分けかたがあるので参加者のうち半分よりは上ということだろうか)
ここでかっこよく、「余裕でした」なんて軽ーく予選突破できていればよかったけど、まぁシリコンバレーのエンジニアでもこんな程度です(笑)。

負けおしみを言わせてもらうなら、普段時間に追われながらコーディングなんてしないから一度詰まると焦ってしまい必要以上に時間がかかってしまった。 あと250点の問題終わったあと、1000点の問題をオープンするまでクロックが止まってると勘違いしたので5分ぐらいロスしたのも痛いところか。 上を見ると1250点中1100点以上とってる人もいるんですが、マジ? 問題読んでタイプするだけでそれぐらい時間かかりそうな気がしそうなんだけど…。 上には上がいるもんだ。 とにかく、自分もまだまだと実感させられたコンテストだった。 もっとがんばりましょう。

ちなみに、問題の概要は…


250点
“1+2+3=”
のような文字列が来たときに結果をintegerで返すメソッドを作成しろ。文字の長さは最大50。 数字は正の整数(数字の先頭に0が付く場合もある)、=の後ろに文字はないものとする。 結果も100000を越えない。 計算できないようなinputが来た場合は -1を返せ。

1000点
AさんとBさんがいて、AはBに借金しているとする。
AがBに手持ちのコイン(1,5,10,25,50という単位)で借金を返そうとしたとき、お金の最小移動枚数を返すメソッドを作成しろ。 解答が得られないインプットの場合は-1を返せ。
(例: Aが 1,1,1,10,10,25 Bが 1,1,25 と持っていて AがBに 23借金していた場合、 AからBへ 1,1,1,10,10 と5つのコインを移動するというのが一つの解答だが、AからBへ25, BからAへ1、1の計3つのコインを移動するということでも借金を払うことができるのでこの場合 3 という結果が正しい)

もうちょっとプログラミングしやすいように、制限が付いてたりしますがこんな感じ。

どうでしょ。 こんなのちょろいぜという人は是非来年のコンテストに参加してみよう。


3 Comments

  1. 今年も開催 Google Code Jam

    昨年、オレもチャレンジした Google Code Jam というプログラミングコンテストがまた今年も開かれる。 昨年いろいろなニュースサイトで取り上げられていたので知っている人も多いと思う。

  2. Google Code(グーグルコード)サイト紹介リンク集

    ・Google Maps API :グーグルマップを自分のサイトへ利用するためのAPI
    ・Google Related Links -:自分のサイトへのダイナミックリンクを表示可能
    ・Google Sitemaps -グーグルのサイトマップ機能、検索エンジンへの最適化可能
    ・Google Web Toolkit – Write…

  3. Google Code Jam 08

    GoogleからプログラミングコンテストCode Jam 08の案内が届いた 各…

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.