うわぁ…レベル高っ…!
なんのことかというと、2013年12月8日(日)にリクルートホールディングスが開催した「Recruit Programming Contest」の話です。プログラミングコンテストっていうのは、例えていうならばプログラミングの五輪や甲子園。プログラマーとそのたまごたちの競いの場であり祭典でもあります。
でも、実際どんな感じに行われているのかってあんまり見たことないんじゃないでしょうか。そこで、今回はコンテストの模様をお届けしますよ。ちなみにコンテストで出題された超難問と同等の難易度の問題も記事後半に掲載してます。プログラミングに覚えがある人はぜひチャレンジを! そうでない人も、ぜひその難易度を一緒に味わってクラクラしましょう。
このコンテスト、リクルートの関連会社のアメリカIndeed社との共同開催。Indeed社は米国の有名大学(MIT等)でのプログラミングコンテストを数多く主催。本コンテストの問題の作成・監修・ジャッジシステムはIndeed社が全面協力しているんだとか。日本でも優秀なソフトウェアエンジニアを発掘し、支援したいという強い思いからこの両社がタッグを組んでコンテストの開催に至ったというわけなんです。
アメリカをはじめ海外ではけっこう頻繁に行われているというプログラミングコンテスト。でも日本ではあまり多くないんだそう。しかも通常はオンラインで開催することが多い中、オンサイトで行うことにしたのには「参加者同士がお互いの交流を深める場にもしたい」という思いがあったんだって。イイハナシダナー!
参加資格は、日本在住の学生(中、高、高専、専門、大学、大学院)および既卒3年以内の未就業者。それに対して東京会場・京都会場を合わせて164名もの参加者が挑戦しました。トップクラスのアルゴリズマーを自任する強者から、コーディングの経験1年未満のビギナーまで、さまざまなスキルレベルの若者たちが集結!
そして、競技形式は以下のような感じで行われましたよ。
競技開始と同時に、複数の問題が提示されます。参加者はその問題を自由な順序で解いていきます。できるだけ多くの問題をできるだけ早く回答することが目標です。最も高得点だった人が優勝です。
正解を導くと同時に早さも求められるというのが肝ですね。
参加者は愛用のノートパソコンに、Indeed社が開発したコードアップローダー「コーディングデュエル」をインストールし、1問ごとに各自のプログラミング環境でプログラムを組んだ後、「コーディングデュエル」上で4分以内に出力ファイルを作ってアップロードします。デュエルって名前がまたいいですね! 思わず胸が熱くなります。
そして午後2時にコンテストがスタート。コンテスト中の様子はというと「カチャカチャカチャ…ッターン」という、例の地獄のミサワ的な音が鳴り響く世界です。そういえば今年のリクナビのCMでも地獄のミサワのキャラクターが使われていましたっけ。なんだかミッシングリンクがつながった感じ!
3時間におよぶ戦いが終わり、その場で表彰式が行われました。
見事コンテストを制したのは東京大学の教養学部に在籍する今西健介さん。
「子供の頃からパソコンが好きでした。プログラミングをやりはじめたのは11歳頃で、プログラマーを目指そうと思ったのは中学時代でした。今はまだ勉強中ですが、将来はモノづくりとアカデミックの中間で、実際に最先端分野に活用できるロジックを考える人間になりたいと思っています。自分以上の強豪も多く参加していたこの大会で優勝できたのは嬉しい。プログラミングのスキルレベルだけでなく、デバッグなども含めた『本番力』が大事なんだとつくづく思いました」
とのこと。
そして、冒頭でもご紹介したとおり、なんと今回の結果から日本のレベルがめちゃくちゃ高いことが発覚!!
今回の参加者の平均回答数は4問。MIT(マサチューセッツ工科大学)でも同じ問題でコンテストを行ったところ、その時の平均回答数は3.5問だったんですって。
indeed社で技術開発のトップを務めるダグ・グレイ副社長は、「海外でのコンテストで日本のプログラマーが非常にいい成績を残していることからある程度予想はしていましたが、非常に良好な結果が出て本当に喜ばしい。今頃、MITの学生は皆さんの脅威におののいていると思います」と賛辞を惜しみませんでしたよ。
ちなみに賞品と賞金は以下のとおり。
賞品 : 米国ツアー(海外代表者との頂上決戦含む)
・アメリカの有名大学とのコンテストに参加
・Indeed社のエンジニアとの交流会を実施
賞金 : 下記の通り
1位:¥299,993
2位:¥199,999
3位:¥149,993
4位:¥99,991
5位:¥79,999
6位:¥59,999
7位:¥39,989
8位:¥29,989
9位:¥19,997
10位:¥9,973
この賞金の意味、わかりますかね? これ実はすべて素数なんです。こんなところでプログラミングコンテストらしさを感じさせてくれるなんて粋ですね。
賞金を獲得した10名に加え、6問以上正解の34名もアメリカ本選ツアーを獲得するという、素晴らしい結果に終わりました。
表彰が終わり、懇親会が始まりましたよ。こちらは東京会場の懇親会の様子。「顔を合わせたことはないけどハンドルネームは知っている」という人と会える場ということもあり、オンサイトで開催したことの効果があったみたいですね。
ゲストとして問題の解説を行ったトッププログラマーの高橋直大さん(写真左)もその輪に加わり、交流を深めていました。
こちらは京都会場の懇親会の様子です。おっと、なにやら人が集まってますね。
実は、懇親会中にもMacBookを取り出してプログラミング談義。さすがだなー。
そのほかにも死闘の様子と懇親会の模様がたくさんあるので、写真ギャラリーでどうぞ。
まずこちらは東京会場の様子。上位3名ともに東京の会場から輩出!
そしてこちらは京都会場。京都会場はずいぶん風流なところだったんですね〜。
動画で見るのもコンテストの雰囲気がわかりやすいかも。かっこいい動画に仕上がってます!
あなたも難問にチャレンジ!
さて、日本全国の猛者が世界レベルであることがわかった今回のコンテスト。しかし、それでも正答率は半分程度。いったいどれだけ難しいんでしょう。
さあ、そんな難問たち、ちょっとどんなものか見てみたいと思いませんか? 模擬練習会で使われた問題を以下に貼り付けておきますよ。
A - ババ抜きスタック制限 : 64MB / メモリ制限 : 256MB特殊なトランプを使ったババ抜きを N 人で行う。
カードに記載される数字は 1 ~ 8 までで、ジョーカーはJである。
N 人にカードが与えられるので、ババ抜きが終了するまでに、プレイヤーがカードを引いた総数を出力せよ。ただしババ抜きが終了しない場合は-1と出力せよ。
このババ抜きのルールを以下に記載する。
各プレイヤーは、次のプレイヤーの手札から一番左のカードを引き、自分の手札の一番右に加える。
つまり、プレイヤー 1 はプレイヤー 2 からカードを引き、プレイヤー N はプレイヤー 1 からカードを引く。
その過程で、引いたカードと同じ数字のカードが自分の手札にあった場合、それらを両方捨てる。
もし、プレイヤーの手札がなくなったら、そのプレイヤーは上がりとし、以後、そのプレイヤーはいないものとして扱う。
例えば、プレイヤー 2の手札がなくなった場合、プレイヤー 1 は、プレイヤー 3 からカードを引く。
ジョーカー以外は偶数枚存在するが、ジョーカーだけはあるプレイヤーに 1 枚だけ配られる。
各プレイヤーの手札から、ジョーカー以外のすべてのカードがなくなったらゲーム終了である。
入力形式入力の 1 行目にはテストケース数 T を示す。以降、T 個のテストケースが続く。
各テストケースの 1 行目は入力値の個数 N を示す。
次の行から N 行にわたって、入力値 c1、c2、...cN が表示される。
ci は、プレイヤー i の初期手札を意味し、文字列である。たとえば、2746J18 は、左から順番に、2746J18を所持していることを表す。
出力形式各テストケースに対して、ババ抜きが終了するまでにプレイヤーがカードを引いた総数を出力する。
ただしババ抜きが終了しない場合は-1と出力せよ。
入力制限1≦T≦100
3≦N≦5
ci は1~8に J を加えた文字列サンプル入力3
3
16372
2746J18
348
4
1234
1234
1234
1234J
5
13645
643125
147
5137J
3245
サンプル出力15
29
-1
ええっと…意味わかりましたか? 僕は問題を解く以前に、問題の意味がわからないという体たらくっぷりでして……。もし意味がわかったというあなたはぜひ解いてみてください。答えはこのページのどこかにあるかも?
問題の意味はわからなかったのですが、このイベントを通じて2つ個人的に感じたことが。1つ目は「リクルートはWebの発展に寄与しようと本気で考えているんじゃないかな」ということ。こんなふうに日本中の若者が一堂に会して競い合い、そして交流を深めるというイベントがあることで、参加者たちはかなりの刺激になったはず。こういう場を設けようという企業の姿勢、めっちゃいいと思います。
もう1つは、「本当に日本の若者たのもしいよー」ということ。MITを凌駕するような才能がたくさんいることに驚きです。いずれ彼らが社会に飛び出し、いろんなサービスやガジェットを生み出すのかなと考えるとすごくワクワクしてきました。
リクルート プログラミングコンテスト[リクルートホールディングス]
(松葉信彦)