ログイン
 
 

ルール

参加資格

参加者は 13 歳以上で日本の居住者である必要があります。 20 歳未満の場合には、さらに親権者の同意が必要です。 また、Google の関係者や、法令により規制を受けている場合には参加が制限される可能性があります。 参加資格のルールや規則についての詳細は必ず利用規約を確認してください。 Google はこれらの参加資格を、法律に基づき許可される場合は、予選ラウンド開始前に変更する権利を留保します。

登録方法

http://code.google.com/codejam/contest/registration?t=890488 にアクセスして参加登録してください。

基本ルール

Google Code Jam Japan 2011 は個人戦です。
期間

予選ラウンドは 6 時間、決勝ラウンドは 3 時間です。

環境

問題を解くためにどのようなプログラミング言語、開発環境、テキストエディタを使用しても問題ありませんが、プログラムを実行するために用いたコンパイラやインタープリタは無料で手に入り、簡単にダウンロードして実行出来るものである必要があります。 使用期限のあるコンパイラやインタープリタを使用してはいけません。 Visual Studioは問題ありません。Visual Studio Expressという無料の(ほぼ同等な)コンパイラが入手可能だからです。 Googleは何か問題が起きた際に個別に判断を行い、例外を設ける権利を留保します。

問題

各ラウンドは 3 つから 6 つのアルゴリズムに関する思考を要する問題で構成されています。 問題は、ページの横、左上のパネルに表示されます。 問題の名前をクリックすると、ページの中央に問題文が表示されます。

問題文は、HTML ファイルで表示されます(画像を含むことがあります)。 問題文には、1 つ以上のサンプルテストケースの入力/出力と、問題の難しさに応じた Small と Large の 2 つの入力/出力の定義が含まれます。 Small と Large の入力ファイルの横には、それぞれに割り当てられた点数が表示されます。

入力ファイルのダウンロード

Small と Large の入力ファイルは、それぞれテキストファイルとしてダウンロードすることができます。

制限時間は、 Small が 4 分、Large が 8 分です。 タイマーは、入力ファイルのダウンロードを開始したときにスタートします。

Small が正しく解けなかった場合、または制限時間を超えた場合は、新たに Small の入力ファイルをダウンロードしてください。 これらはランダムに生成されるため、新しいファイルには異なるテストケースが含まれることがあります。

Large の制限時間は 8 分間で、解くチャンスは一度きりです。 8 分以内であれば、解答の再提出は可能ですが、最後に提出されたものだけしか採点されません。 制限時間が過ぎたあとに再び別の Large の入力ファイルをダウンロードすることはできません。

入力ファイルの再ダウンロード

Small は 4 分、Large は 8 分の間であれば、同じ入力ファイルを再びダウンロードすることができます。

解答の提出方法

それぞれの問題には、Small と Large の入力ファイルがあります。 Small と Large では、解答の提出方法が異なります:

  • Small の提出方法: Small の入力ファイルをダウンロードし、そのファイルに対してプログラムを実行し、出力ファイルとソースコードを提出するまでを、4 分以内に行ってください。 制限時間を超えたり、間違った解答を提出すると、その試みは不正解であったと判定され表示されます。 解答は何度でも提出することが可能ですが、その都度新しい Small の入力ファイルをダウンロードする必要があります(ファイルはランダムであるため異なるテストケースが含まれることがあります)。 解答の正解/不正解は、提出後すぐに確認できます。
  • Large の提出方法: Small に正解すると、Large の入力ファイルがダウンロード可能になります。 Large の入力ファイルをダウンロードし、そのファイルに対してプログラムを実行し、出力ファイルとソースコードを提出するまでを、8 分以内に行ってください。 Large の入力ファイルはひとつで、8 分の間に何度でも提出が可能ですが、最後に提出された解答のみが有効とされます。 解答の正解/不正解は、コンテストの終了後に確認できます。

*注: コンピューターとサーバーの間で通信時間が発生することがあります。 各制限時間に余裕をもたせて提出することをお勧めします。

提出した解答の一覧を表示するには

左側のパネルの「自分の提出状況を見る」をクリックします。 このページには、自分が提出したソースコードと、それぞれの入力/出力ファイルが表示されます。 Large に対しては、最後に提出したもののみが表示されます。

解答の採点について

  1. 空白類文字の細かい違いは検査の対象にはなりません。 改行文字以外の連続したASCII空白文字列は、ひとつのスペースとみなします。 Unix、Mac、 Windows の改行コードは、いずれも改行とみなされます。
  2. 各行の先頭と末尾の空白文字列は検査の対象にはなりません。 その他の空でない行は 1 と 3 のルールを適応します。
  3. 浮動小数点表現の場合、二つの数の差が 1e-6 以下であるか、もしくはその差と片方の数の比が 1e-6 以下であれば、問題文に特に記述がないかぎり、同等とみなされます。 これは、整数には適用されません。整数は、値が厳密に一致しないかぎり同等とはみなされません。
ソースコードの提出方法
ソースコードのアップロード

各問題を解くために使用したすべてのソースコードを提出してください。 コンテスト終了後にソースコードを送信することはできません。 コンテスト終了後、提出されたすべてのソースコードは公開され、誰でもアクセスできるようになります。 ソースコードは審判や他の参加者によって出力が再現できるものである必要があります。

意図的に分かりかりにくく書かれたソースコードや空のソースコードファイルは認められません。 Google は、ルールを順守しない参加者を失格とする権利を留保します。

予選および決勝ラウンド中に、誤ったソースコードをアップロードした場合、「質問する」のリンクをクリックして、審判にお問い合わせください。 審判はその提出を不正解とし、参加者は再度提出することが可能になります。

各ラウンドの終了後、ソースコードと出力ファイルが一致しない場合、(参加者自身の申告による場合も含む)審判はその参加者により提出された複数のソースコードを調査し、不一致の程度を確認します。 不一致がない場合は、何も起こりません。 ささいな不一致である場合は、4 分のペナルティが課されます。 大きな不一致であった場合、参加者は、その問題の入出力に対して取得したポイントを全て失います。

ソースコードのファイルの種類

ソースコードは、テキストファイルか、それらをまとめて zip で圧縮したファイルとして提出してください。 アップロードできる最大サイズは 100KB です。 複数のテキストファイルをアップロードすることも、それらをまとめて 1 つの zipファイルでアップロードすることも出来ます。 その場合、展開後のサイズは 1MB 以下である必要があります。

手作業で問題を解いた場合

一部または全部を手作業によって問題を解いた場合は、テキストファイルにその説明を書いて提出してください。 Google は、ルールを順守しない参加者を失格する権利を留保します。

プログラミング言語以外の方法を用いた場合

問題を解くために特定のソフトウェアを使用した場合、テキストファイルにその説明を書いて提出してください。 使用するソフトウェアは、上記のコンパイラとインタプリタと同じ制限を守ってください。 また、ソフトウェア用に書いたスクリプトも提出してください(例えば、数値計算ソフト用のスクリプト、OpenOffice.org スプレッドシートなど)。

プログラムはユーザーからの入力を受け付けるようなものでも問題なく、必ずしも自動的に出力を生成する必要はありません。 そのようなコマンドラインスクリプトを作成した場合は、問題解決に使用したコマンドも書いて提出してください(例えば、awk を使った Linux のコマンドライン、Hugs コマンド、Octave インタプリタコマンド、シェルコマンドなど)。

複数のプログラムを使用した場合

複数のプログラムを使用した場合、補助的なプログラムも含めて、すべて提出してください。

標準または非標準のライブラリを使用した場合

Boost など標準のライブラリや、その他オープンソースのライブラリを使用することができます。 ライブラリが公開されている場合は、ソースコードとともにライブラリの内容を提出する必要はなく、代わりにライブラリのウェブサイトへのリンクを書き加えてください。

所属する学校の ACM ICPC のライブラリなど、非標準のライブラリを使用する場合は、それらを使用するライセンスを保有していることを確認してください。

標準、非標準のライブラリを問わず、問題を解くために使用したコードはすべて提出してください。 ソースコードと圧縮したライブラリの合計サイズが 1MB を超す場合は、ソースコードにライブラリへのリンクを記述し、ライブラリを含めずに提出することができますが、そのリンクによってコンテスト終了後もライブラリへのアクセスが可能である必要ががあります。

勝つためには

得点の仕組み

問題と、Small / Large の区分によって、取得可能な得点が異なります。 参加者が問題の Small や Large に正解するたび、対応する表示された得点を獲得します。 最高得点を獲得した参加者が勝利します。 得点は、各ラウンドごとにリセットされます。

ペナルティタイムと引き分け

得点で引き分けた場合は、ペナルティタイムが少ない参加者が勝利します。 ペナルティタイムは次の式で求めることができます。

ペナルティタイム = 最後に提出した正しい解答までにかかった時間(時間はラウンドの開始から測定) + Small に対する不正解につき 4 分 (最終的に正しい解答があった Small にのみ適用)

たとえば、次のようにコンテストが進行した場合:

[17m10s] A-Small 不正解
[17m35s] A-Small 不正解
[18m15s] A-Small 正解 (10点)
[29m30s] B-Small 不正解
[30m59s] C-Small 正解 (30点)
[45m11s] A-Large 正解 (15点)

あなたの得点は 55 、ペナルティタイムは 53分11秒 (45分11秒 + 2*4分) となります。

自分の成績を確認するには

コンテスト中は、次の方法で自分と他の参加者の成績が確認できます:

  • ステータスメッセージ
  • 提出パネル
  • ミニスコアボード
  • フルスコアボード
ステータスメッセージ

Small に対する解答を提出すると、問題文の上に結果を表示するメッセージが表示されます。 ファイルに問題があり提出が拒否された場合、タイマーは引き続き時間を刻みます。 この場合、制限時間内であれば、再提出が可能です。 解答が問題なく提出された場合には、正解/不正解が表示されます。 不正解の場合でも、それ以上の詳細(どのテストケースに間違いがあったか、など)については通知されません。

Large に対する解答の正解/不正解は、コンテスト終了後に公開されます。

提出パネル

画面左の提出パネルには、参加者全員の提出状況の要約、各問題の取得可能な得点 、提出の状況が表示されます。 また、各 Small に対しては、参加者全員の正解率と自分の提出状況が表示されます。

たとえば、誤った解答を送信すると、「不正解 1 度目」、「不正解 2 度目」 などと表示されます。 正しく解答すると、ステータスが「正解」に更新されます。

Large の採点はコンテスト終了後に行われるため、次のいずれかのステータスが表示されます:

  • 未提出 - Large の入力ファイルがまだダウンロードされてない
  • 提出受付中... - Large の入力ファイルがダウンロードをされ、8 分のタイマーがスタートしている
  • 時間切れ - Large の入力ファイルがダウンロードされたが、解答が提出されなかった
  • 提出済み - Large の入力ファイルのダウンロードされ、解答が提出された

コンテスト終了後、結果に応じて「正解」か「不正解」が表示されます。

ミニスコアボード

提出パネルの下のミニスコアボードには、最高得点を取得している参加者のニックネームが表示されます。

フルスコアボード

フルスコアボードは、1 つ以上の問題に正解しているすべての参加者の成績を表示しています。 スコアボードに表示する情報を選択するオプションを設定してください。 参加者の順位、得点、ペナルティタイムは常に表示されます。 「解答時間」を選択すると、各参加者がその問題に正解するまでにかかった時間が表示されます。 「提出回数」を選択すると、参加者が Small を正解するまでに何回解答を提出したかが表示されます。

友人の成績を表示するには、「友達」のタブをクリックし、スコアボードの上方、右側の検索ボックスにお友達のニックネームを入力し、「友達を追加」をクリックしてください。 スコアボード上のユーザー名の隣にあるスターをクリックすることでも、友達を追加することができます。 「ライバル」のタブを選択することで、自分のランクに近い参加者の成績を表示することもできます。

観戦するには

観戦のみを希望し、問題やスコアボードを見たいだけであれば、Google Code Jam Japan に登録する必要はありません。 予選ラウンド開始 5 分後から、トップページにあるリンクよりコンテストページを開くことができます。 問題を表示することはできますが、入力ファイルをダウンロードしたり、解答を提出することはできません。 また、スコアカードの「友達」や「ライバル」機能は使用できません。

練習するには

過去に出題された問題でコンテストの前に練習することができます。 コンテスト本番までに、インターフェイスや問題の構成、問題の種類に対して慣れておくことをお勧めします。 練習中は制限時間がなく、何度でも入力をダウンロードし、解答を提出することができます。

TopCoderSphere Online JudgeACM ICPC のコンテストも過去の問題集を公開しています。

コンテスト中に質問をするには

Google の審判は、コンテストの期間中と前後 30 分、参加者からの質問を受け付けています。 質問がある場合には、「質問する」のリンクをクリックして、お問い合わせください。 質問の際には日本語か英語をお使いください。

Google の審判が、直接返信するか、もしくは参加者全員にアナウンスを行い回答いたします。 未読メッセージががあると、「質問する」の隣に未読メッセージの数が表示されます。

サイトが正しく動作していない際には、codejam@google.com へメールでお問い合わせください。

問題についての質問に通常、審判は「問題文をお読み下さい」と返答します。 審判は、どのテストケースでコードが誤った答えを返すかなど、バグを見つけるヒントを参加者に与えることはありません。 問題文が明らかに間違っていたり、分かりにくかったりする場合は、参加者全員にメッセージを配信します。

コンテスト中に他の出場者と対話するには

他の参加者との協力について

Google Code Jam Japan 2011 は個人戦です。 各ラウンド開始から終了の間、コンテスト参加者は他の誰とも協力してはいけません。 また、問題文や解法についての議論や共有、他の場所への転載も禁止しております。 不正行為を行った、もしくは行おうとした参加者は失格となります。

不正行為や疑わしい行為を発見したら、こちらよりご報告ください。

他の参加者とチャットする

参加者は、Freenode のチャンネル #gcj で他の参加者とチャットすることができます。

まず、IRC クライアントをインストールしてください。 Firefox のアドオン Chatzilla などが便利です。 他にもさまざまな IRC チャットクライアントが利用可能です。

次に、Freenode のサーバーに接続します。 サーバーは多数ありますが、一例として、 chat.freenode.net への接続方法を説明します:

  • IRC クライアントから次のコマンドでサーバーに接続します: /server chat.freenode.net
  • 次にチャンネルに参加します: /join #gcj -- 以上です!

最後に、ハンドルネームを登録する必要があります。

ハンドルネームの変更は、/nick 'nickname' で行います。その後、次のコマンドでパスワードを登録してください: /msg nickserv register 'password' 'mail address'

確認の為のコマンドが指定したメールアドレスに送信されるはずですので、その説明にしたかって登録を完了させてください。

登録ユーザーとしてログインするには同じハンドルネームで IRC にログオンし、次のコマンドを入力してください: /msg nickserv identify 'password'

ログインの際、ハンドルネームが他の人に既に使われていた場合には、次のコマンドで登録ユーザーとしてハンドルネームを取り戻してください。

  1. /msg nickserv release 'nickname' 'password' nickname をロックし、そのハンドルネームを使用中のユーザーは強制的に別の名前に変更されます。
  2. /msg nickserv release 'nickname' 'password' ロックを解除して使用可能にします
  3. /nick 'nickname' ハンドルネームを取り戻します

決勝に進出するには

オンライン予選ラウンド

オンライン予選ラウンドの開催日時は未定です。 予選ラウンドの期間中は、いつでもログインして参戦できます。 予選ラウンドで、1 つ以上の問題について Small と Large の両方を解いた人がオンライン決勝ラウンドに進出します。

オンライン決勝ラウンド

オンライン決勝ラウンドの開催日時は未定です。 決勝ラウンドでの順位に基づき、賞金が授与されます。

賞金

順位賞金
1位256,000 円
2位128,000 円
3位64,000 円
4位~9位8,000 円
1位~200位Code Jam Tシャツ

賞金・賞品を受け取るには、予選ラウンドを勝ち抜く必要があります。 決勝ラウンドでの順位に基づき、賞金が授与されます。

すべての税金と関税は(該当する場合)受賞者が負担してください。

詳細については利用規約を参照してください。