[go: up one dir, main page]



[本記事は、Code Jam のチームメンバーである Igor Naverniouk が 4 月 18 日 に Google Developers Blog に投稿した 「Code Jam's Sprint to Google I/O」という記事を元に、翻訳したものです。詳しくは元記事をご覧ください。 - 山崎]

Google Code Jam の予選は 4 月 13 日に開始し、ニューヨークで開催する決勝に残れる 25 人を目指して、世界中から 36,000 名を超えるプログラマーの皆さんの応募がありました。今年の Code Jam の参加登録は既にクローズしていますが、来年を待たず、新しいチャレンジをする方法があります。



それが、4 月 19 日(木)午前 7:00 PDT / 14:00 UTC(日本時間では 19 日 23:00)より実施する、Code Jam Sprint です。このチャレンジを解いた最初の 100 人の方は、たった 20 分で売り切れてしまった今年の Google I/O のチケットを購入する機会を得ることができます。

Code Jam Sprint に参加するには、Code Jam のベテランである必要はありませんが、事前登録が必要です。チャレンジが始まる前にウォームアップをしたい場合は、Code Jam のクイックスタートガイド練習問題をご覧ください。

チャレンジの詳細は、4 月 19 日(木)午前 7:00 PDT / 14:00 UTC(日本時間では 19 日 23:00)に Google Developers のページにポストされます。お見逃しなく!



[Google Code Jam とは、複雑なアルゴリズムの問題を限られた時間の中で解く能力を競う個人戦のプログラミングコンテストです。2011 年は、東京オフィスの Google エンジニアが知恵を絞り、 初めて英語以外の言語での Google Code Jam Japan 2011 を開催しました。たくさんの方にご参加頂きまして、まことにありがとうございました。Google Code Jam Japan チームのインタビュー記事をお楽しみください。なお、この記事は "Meet the Google Code Jam Japan Team!" を元に翻訳・再編集しています。-山崎]

Google Code Jam Japan はどうやって生まれたのですか?

Frank: 私は本社での Google Code Jam チームのメンバーでした。東京オフィスで働くことを決める同時に Google Code Jam Japan を行いたいというアイディアを思いつきました。本社で行なっていた Google Code Jam でも日本からの参加者が多かったため、東京オフィスで Google Code Jam Japan チームを作るとよいのではと考えました。
高橋: グローバルの Google Code Jam には既に多くの日本人の方が参加してくださっているのですが、コンテストの案内から内容までが全て英語なので敬遠してしまっている方も多いのではないだろうか、と思ったのが出発点です。
末松: 最初はエンジニアの Frank が Google Code Jam を日本でやったらどうだろうと提案しました。私もプログラミングコンテストで楽しんだ経験があるので、ぜひやりたいと話しました。
小西: 日本には多くの優秀なプログラマが存在しているはずなのですが、Google Code Jam などのプログラミングコンテストの世界では、まだまだ日本からの参加者が少ないように感じていました。その原因はコンテストに関する情報や、問題自身が英語で書かれているため、試しに挑戦してみようという人にとって敷居が高くなっているためではないかと考えました。
今回、日本語でのコンテストとして Code Jam Japan を行うことにしたのは、この敷居を取り払うことによってより多くのプログラマに興味を持ってもらえるはずだと思ったからです。

Google Code Jam Japan の準備にあたって大変だったことは何でしたか?

Frank: 問題自体を作ることでしたね。Google Code Jam では問題のクオリティーがとても高いので、サンプルソリューション、インプットジェネレーターなどを提供するのが大変でした。
高橋: 問題は日本人のスタッフはもちろん、US にいる Google Code Jam のコアチームとも共有しつつ作成していくので、日本語版と英語版の両方が作られていました。この 2 つはどんどん更新されていくのですが、そこで齟齬が生じないようにするのが大変でした。
末松: コンテストのシステムは当時英語にしか対応していませんでした。システムの多言語対応を 20% プロジェクトの限られた時間で行うのはチャレンジングでした。
小西: 問題の難易度調整に苦労しました。初めてコンテストに挑戦する方にも取り組みやすくプログラミングコンテストの楽しさを理解してもらう問題と、常連の方をも唸らせる斬新な問題、この両方の問題を取り入れ、コンテストを盛り上げるために 1 位と 2 位が点数で差がつくように、なおかつ全問解いて時間を持て余してしまう参加者が出ないようにと注意しながら問題を設定しました。実はコンテストの2週間前までチームの皆と喧々諤々のディスカッションを行い問題の入れ替えや調整を繰り返していました 。



準備を行うGoogle Code Jam Japan team

Google Code Jam Japan team に参加することによって学んだことは何ですか?

高橋: 私は今までも個人的にいくつかプログラミングコンテストを開催したことがあったのですが、Google Code Jam のように何千人もの人が一度に参加するようなコンテストは今回が初めてでした。コンテストは些細なミスやバグがあっただけで台無しになってしまいますから、そういった事態が起こらないように細心の注意を払ってプロジェクト運営を進めたり、コンテストシステムの開発を行ったりすることは、とても良い経験になりました。
末松: コンテストの最中に運営側の問題が発生したのですが、参加者のみなさんにとって不公平なことが起きないように気をつけながらチームメンバーが問題に対処している様子を間近で見て、勉強になりました。

Google Code Jam Japan でもっとも思い出に残る出来事は?

Frank: チームと共に活動し、ポイントシステムを考えたり、長時間のディスカッションを続けたりしたのが思い出に残っています。とても楽しかったです。
高橋: コンテストシステムの日本語化が一段落ついたところで、バグの洗い出しのために社内でミニコンテストを開いたんです。そのコンテストは問題を解くのではなく、コンテストシステムのバグを探し、見つけたバグの数を得点として競うというものです。上位の数名には景品が贈られるのですが、バグが少なければ開発者の私たちが景品を貰えるということになり、開発にも気合が入りました。しかしその甲斐なく、散々な結果だったんですけどね。
末松: チームを率いていた Frank への感謝をこめて、問題作成チームはこっそりと全ての問題文に "フランク" という人物を登場させました。Frank は日本語が得意ではないので、ばれないだろうと考えたのです。でも、コンテストの決勝戦の朝オフィスに着いた時には登場人物が "パスカル" に書き換えられていました。前日に気づいた Frank がこっそり書き換えていたのです。(注:末松のあだなはパスカルです)


Google Code Jam Japan チームのメンバー達
 (左から): Frank Chu, 末松 宏一高橋 周平

Google Code Jam Japan 開催にあたって心配なことはありましたか?

Frank: 初めての Google Code Jam Japan だったので参加者がどれくらい集まるかが分からなかったので、すこし不安でした。結果的には大人数の日本の方々に Google Code Jam Japan に参加して頂きました!
高橋: Google Code Jam を英語以外で開催するのは初めてだったので、コンテストシステムは一から国際化対応をする必要がありました。これが意外と大変で、本番までに間に合うかが心配でした。
末松: 充分な人数の参加者が集まるのかどうか、また、参加者が集まりすぎてシステムが耐えられなくならないかが心配でした。結果的には 2,000 人近い方に登録していただき、人数に関する問題は発生しませんでした。
小西: 今回は初めてコンテストに参加する方が多いだろうということで、参加したいけれどどうしたらよいのかわからないという人が出るだろうと予想されました。これに対処するためマニュアルとコンテストサーバをすべて日本語化し、日本語の練習問題を用意することにしました。また、初参加の方とベテランの方で問題文の解釈の仕方にズレが出ないように、問題文が暗黙の仮定を置いていないかなどを特に丁寧にチェックしました。

今後の開催にあたって、変えていきたいことはありますか?

高橋: 今回の Google Code Jam Japan は、グローバルの Google Code Jam に元々参加してくださっていた方々はもちろん、初めての方にもたくさん参加して頂けました。今後ももっと沢山の人にプログラミングコンテストを楽しんでもらう機会を提供していきたいです。
末松: 中学生・高校生に向けたコンテストには意味があるのではないかと思っています。コンピュータ科学やプログラミングの楽しさを若いうちに知ってもらいたいからです。
小西: 問題の背景など、深く踏み込んだ解説の機会を設けられればいいなと考えています。
何が問題を興味深くしているのかや、問題に対する複数の解法の存在、どのように考えて問題の解法を思いつくのかや、実際にコンテストで使われたアルゴリズムが日常使っているアプリケーションで使われていることを説明できれば、アルゴリズムについて考えることの楽しさを共有できる人がもっと増えると信じています。

あなたにとって Google Code Jam Japan とは?

Frank: 私は大学時代に実際に Google Code Jam に参加しました。その結果、様々な方とお会いし、お話する機会があり、さらに、プログラミングに興味を持っている人たちと話もたくさん出来、貴重な経験をすることが出来ました。その貴重な経験を与えてくれたコミュニティーに恩返しとしてこれからも Google Code Jam を続けたいと思います。
高橋: Google Code Jam は私の人生を変えたコンテストです。私は学生時代に Google Code Jam に参加していて、2006 年には Google ニューヨークオフィスで開かれた決勝大会に出場したことがあります。単身で海外に渡るのは初めてで緊張しましたが、初めて Google のオフィスに入り、その自由な文化に触れ、他では得難い貴重な経験をすることが出来ました。今、私が Google にいるのは、その時の経験があってこそだと思っています。今は Google Code Jam を開催する側となり、参加する方々に私がかつて得たような素敵な経験を提供することができればと思います。
末松: Google Code Jam を含めたプログラミングコンテストは、他の参加者とつながりを持って競い合いながら自分のアルゴリズムに関する知識を身につけることができます。今までは参加する側でしたが、場を提供する側になれることを嬉しく思っています。
小西: 日本中の賢いプログラマ達同士が一堂に会するお祭りです。

Google Code Jam Japan 2011 予選スタッフ

Problem A. カードシャッフル 出題: 松本 宜丈, 吉野 剛史, テスト: 泉 祐介
Problem B. 最高のコーヒー 出題: Frank Chu, 泉 祐介, テスト: 吉野 剛史
Problem C. ビット数 出題: 山内 暁, 牟田 秀俊, テスト: 牟田 秀俊
解答作成、その他準備: 泉 祐介, 北村 裕太, 小西 祐介, 吉野 剛史, 三廻部 大, 牟田 秀俊, Frank Chu, Tomek Czajka
アプリケーション国際化対応: 末松 宏一, 高橋 周平

Google Code Jam Japan 2011 決勝スタッフ

Problem A. アンテナ修復 出題: 松本 宜丈, 吉野 剛史, テスト: 北村 裕太
Problem B. バクテリアの増殖 出題: 山内 暁, 北村 裕太, テスト: 吉野 剛史
Problem C. ワイルドカード 出題: 松本 宜丈, テスト: 小西 祐介
Problem D. クローゼットルーム 出題: 小西 祐介, 牟田 秀俊, テスト: 小西 祐介
Problem E. 無限の庭園 出題: 野田 久順, 菅原 悠, テスト: 川中 真耶
解答作成、その他準備: 泉 祐介, 川中 真耶, 北村 裕太, 小西 祐介, 菅原 悠, 並木 洋平, 吉野 剛史, 松本 宜丈, 三廻部 大, 牟田 秀俊, 山内 暁, Frank Chu
アプリケーション国際化対応: 末松 宏一, 高橋 周平

※ 次回のグローバルな Google Code Jam 2012 は、米国時間 3 月 13 日に登録開始となる予定です。詳細はこちらをご覧下さい。



[東日本大震災の発生を受け、開催を延期していた Google Code Jam Japan ですが、改めて 10 月 1 日に開催されることになったとのことで、Google Code Jam 事務局からのお知らせを頂きました。Google Japan 主催、日本語での出題で、日本在住の方が対象のプログラミングコンテストです。ぜひふるってご参加ください。-山崎]

Google では 2003 年から毎年、世界中のプログラマを対象にしたプログラミングコンテスト Google Code Jam を開催しています。今年は 30,000 人のプログラマが 130 の国から参加し、総計 60 以上のプログラミング言語を用いて競い合いました。7 月に東京オフィスで行われた決勝戦には世界中から選りすぐりの 25 人が集結。日本からも過去最高となる 3 人が Top 25 に入り、rng..58 さんが日本人初となる Google Code Jam 世界チャンピオンに輝きました!

さて、今度は日本の居住者をターゲットとした Google Code Jam Japan の開催が 10 月 1 日に迫っています。日本ではここ数年 Google Code Jam の参加者数が飛躍的に増えていますが、英語の問題文に躊躇して参加していない、という声も多数聞かれました。今度のコンテストは日本語で行われますので、そんな方々にも気軽に参加していただけると思っています。

もちろん、世界大会と同様に、成績上位者には賞金、そして他では絶対に手に入らない特製 T シャツを準備しています :-)

参加登録はコンテストのサイトから受け付けています。また、本番を待ち切れない人のために本番と同じシステムと練習問題も準備しています。このような情報は Twitter アカウント@GoogleCodeJamJp でも随時流していますので、興味のある方は follow してみてください。

それでは、10 月 1 日にお会いしましょう。私たちもコンテストの開催をとても楽しみにしています!



[日本で開催予定の Google Code Jam Japan の延期についてはこちらの記事でお伝えした通りですが、 全世界で開催される Google Code Jam 2011 は予定通り開催されます。本記事はその Google Code Jam 2011 について、ソフトウェアエンジニアの稲葉 一浩が投稿してくれました。 -山崎]


あなたは、板を並べて、丁度ぴったり 100 億メートルの、長い長い塀を作ろうと思い立ちました。馴染みの工芸店では、233 メートル、456 メートル、あるいは 787 メートルの板なら、注文すれば何枚でも売ってくれます。板をうまく組み合わせて、最小の枚数でぴったり 100 億メートルを作るには何枚の板を買えばよいでしょうか?

注意してください。作りたい塀は、とても長いのです。膨大な枚数が必要ですが、1 枚も間違わず、正確に計算してくださいね!

Google では 2003 年から毎年、世界中のプログラマを対象にしたプログラミングコンテスト Google Code Jam を開催しています。昨年は、12,000 人のプログラマが、125 の国から参加し、総計 53 のプログラミング言語を使って競い合いました。日本からは、rng..58 さんと iwi さんの 2 人が決勝に進出し、7 位と 9 位と、好成績を残しました。

そして、今年ももちろん、Google Code Jam 2011 (世界大会) を開催します。

まずは、日本時間で 5 月 7 日の午前 8 時から、24 時間の予選ラウンドが行われます(これは、24 時間の間の好きなタイミングに数問の問題を解いていただくものです)。その後、5 月から 6 月にかけての週末に数時間のオンラインラウンドが 3 回開かれ、すべてを好成績で突破すると、いよいよ 7 月 29 日、決勝ラウンドです。今年の決勝ラウンドは、Google の東京オフィスが舞台となります。世界のトッププログラマと直接会って戦えるチャンス。ぜひ、腕を振るって挑戦してください。参加登録は、こちら Google Code Jam のサイトで行えます。締め切りは、予選ラウンドの終わりまでとなっています。

ところで、はじめに引用した板の問題は 2010 年の決勝直前のラウンドで出された難問です。こんな風に、巨大なデータが来ても動じないアルゴリズムを、バグ無く、高速に実装する力が試される問題が次々と出題されるのが、このコンテストです。実は、中でも、この長い板の話は私のお気に入りの一問なのです:)。この問題は、データの数値が小さい時は、多くのアルゴリズムの教科書でも見かける「よくある」問題なのですが、データが大きくなると、別の工夫が必要になってきます。そして、データの巨大さがある一線を越えると、それを逆手にとったまったく違う発想の巧い解決が可能になるのです。ぜひぜひ、考えてみてください。他にも、過去の問題はすべて公開しています。練習がてら、解いて楽しんでいただければと思います。

それでは、みなさまの挑戦をお待ちしています!

ご参考:Google 公式ブログの記事(英語)



==おしらせ==

東北地方太平洋沖地震の発生を受け、Google Code Jam Japan の開催を延期することになりました。 改めた開催日時は追ってアナウンスいたします。 被災された皆さまには心からお見舞い申し上げるとともに被災地の一日も早い復旧をお祈り申し上げます。


日本語による Google Code Jam Japan 2011 の開催がアナウンスされたため、Code Jam チームのエンジニアの皆さんにお話を伺いました。なお、Code Jam チームの名前は、過去の Code Jam で使っていた名前や、普段使用しているハンドルで表記させて頂きました。


山崎: Google Code Jam Japan 2011 の開催がアナウンスされましたね。改めて Google Code Jam について教えてください。

yukoc: Google Code Jam は複雑なアルゴリズムの問題を限られた時間の中で解く能力を競う個人戦のプログラミングコンテストです。世界大会は 2003 年から行われていて、世界中から参加があります。学生、社会人問わず参加ができ、世界大会の最終ラウンドには、開催国の Google のオフィスにさまざまな国からプログラマーが集まります。

2011 年は世界大会に先駆け特別に Code Jam Japan を用意しました。

山崎: 過去にはどのような問題が出題されたのですか?

yuizumi: 様々な分野や難易度の問題が出題されています。私が選手として参加した 2008 年の大会では、「2 駅間を結ぶ鉄道路線の時刻表が与えられる。その時刻表どおりに運行するには何台の列車が必要になるか。」(Qualifcation Round)、「教室で試験をするにあたり、カンニング防止のため、ある生徒の両隣とそのひとつ前の席には別の生徒が座らないようにしたい。また、教室の席の一部は壊れていて使えない。最大で何人までその教室で試験を受けさせることができるか。」(Online Round 3)などがありました。

山崎: 参加者はどのくらいいるものなのですか?

ykonishi: 2010 年の世界大会には、世界中から 2 万人以上、日本からは 638 人が参加しました。予選ラウンドを日本からは 485 人が突破し、アイルランドのダブリンで行われた最終ラウンドには 25 人中なんと 2 人の日本代表が勝ち残りました。

Code Jam Japan は予選ラウンドと最終ラウンドともに日本時間の週末午後にオンラインで行われるので、より多くの方に参加していただけるのではと期待しています。

山崎: Code Jam Japan は Google Japan 主催、日本語での出題で、日本在住の方が対象だと伺いました。

dmikurube: はい。ルールも日本語で表記しており、大会に関する質問も日本語で受け付けます。今までの Google Code Jam では「英語を読むのが面倒くさいなあ」「難しそうだなあ」と感じていた方も、今回の Code Jam Japan は気軽に参加していただけるようになっています。

山崎: 今のうちに準備したい方のために役に立つサイトはありますか?

pascal: クイックスタートガイド過去問 (英語) は参考になると思いますのでぜひ読んでみてください。また Google との関係はありませんが、TopCoder の Single Round Match ()も問題の方向性としては似ていると思います。

山崎: Code Jam Japan 2011 の準備にあたっての裏話などあれば教えてください。

ykonishi/frank: Google Japan のエンジニアの中には Google 入社前に ACM ICPC や TopCoder、そしてもちろん Google Code Jam 世界大会などのプログラミングコンテストに参加していた者も多数おります。これらのコンテストは非常に楽しいものですが、日本の優秀なプログラマーの中にはこれらの大会が英語で行われているために参加しないという方が多いということも知っています。そこで、このたび Code Jam チームと共に日本語のコンテストを開催することにしたのです。世界大会と同様、日本大会は Google の社員が問題からルールまですべてを手がけました。社内のカフェで夕飯を囲みながら T シャツのデザインや参加規約について話したり、加点方式を決めるのに 2 時間議論したりしました。


(Code Jam Japan 2011 の準備風景)

山崎: ズバリ勝つための秘訣を教えてください。

nya: 計画的に問題を解くことですね。コンテストは 1 ラウンドあたり数時間と限られた時間で行われるので、必ずしもすべての問題に手をつけられるとは限りません。ですので、たとえばある問題の解法が思いつかないからといって、その問題にこだわって 1 時間考え込んでしまうと、他に解ける問題があったとしてもチャンスを逃してしまうかもしれません。ぜひ一度すべての問題に目を通して、自分の得意な分野の問題から解いていってください。

山崎: ありがとうございました。開催概要は以下のとおりです。皆さん、ぜひ参加してみてください!

●開催概要●


予選 3 月 19 日(土)延期予定
決勝 3 月 26 日(土)延期予定
(予選・決勝ともにオンラインで行われます)
賞品: 賞金と特製 T シャツ(T シャツの写真はこちら : 左から pascal、yukoc、nya がモデルをしています)

参加登録: http://code.google.com/codejam/japan
Twitter アカウント: @GoogleCodeJamJp