Pythonみなさんは何のためにプログラミングをしていますか?仕事のため、何かをつくるため。それも良いけれど、「強くなる」ためにプログラミングしてみませんか。様々なジャンルのプログラミングコンテストとまだ見ぬライバルたちがあなたを待っています。今回はアルゴリズム/AI/機械学習/セキュリティ等の様々なジャンルのコンテストとその始め方について紹介したいと思います。※これはPyConJPでの発表を文字におこしたものです。Pythonの話は殆どないです。解答例プログラミングコンテストとは?プログラミングコンテストは、ひとことで言うと、みんなで同じ問題を解いて解くスピードや、スコアを競いあって青春するイベント!です。プログラミングコンテストといっても、様々なコンテストがあります。紹介したいと思います。参加資格に制限のないコンテスト*1を紹介していきたいと思います。基本的に、みんなで同じ問題に取り組みます。参加者のコードが終了後に公開されたり、ブログで解法が紹介されます。自分の書いたコードが唯一の正解となってしまうと思います。コンテストで同じ目的を持った、他の人と自分のコードや解法を比較することによって、自分の欠点だったり、より良い解決方法がわかることが多々あります。同じコンテストに出ていた、たくさんのライバルと知り合えるもうひとつ、大事な利点は、同じようなことを仕事にしている/勉強している仲間が見つかることです。勉強会やコミュニティに参加したりしていると、同じ分野を勉強している人に出会うことができますが、コンテストでも同じです。スコアやランキングという明確な数値で殴り合ったライバルたちとは、強いきずなが生まれます。(多分!)アルゴリズムのコンテストアルゴリズムのコンテスト、どんなことをするのか想像つかない人も多いと思うので、問題を見てみましょう問題13つの辺を、a,b,cとすると、こんな感じに仲間はずれを返してあげればいいですね。これも立派なコンテストの問題です。数学が得意な人はこんなふうにかいてもいいかもしれません。cもう少し、難しい問題を見てみましょう。3段おりて(n-3)段という感じになるので、これをそのままコードにしてみます。3)こんな感じになりました。マニアックなかんじになってきましたね。このコードで問題は解けるでしょうか?答えはバツです。これでは正解にはなりません。いう制約があるためです。以下の二点について考えてみましょう。計算時間を見積もってみよう!デフォルトのPythonの再帰回数の限界を調べてみよう!「計算量」についてはこの辺が参考になると思います。Qiita解答例は1番下に用意しました。こちらの2問目の問題は数学っぽさがあって、「自分には無理」って思う人も多いと思います。これを解けるようになるのがアルゴリズムコンテストであって、最初から解ける必要はまったくありません。それではさっそく、アルゴリズムのコンテストを3つ紹介します。25:00~TopCoderについては聞いたことが有る方も多いかもしれません。75分で3問の問題が与えられます。間違ってそうなプログラムを撃墜するフェーズ(バグ探し)があります。撃墜すると結構得点がもらえます。問題を解いても、終了時まであってるかどうかがわからない。他人に落とされるかもしれない!!ドキドキ度ナンバー1のアルゴリズムコンテストです。早くたくさん解けば、高い得点が得られます。自分の得点から順位が計算され、順位に応じて参加者のレーティングが更新されます。=競技プログラマー(コンテストをやってる人)の格みたいなところがあります。レーティングに応じて、コンテスタントはグレーコーダー、グリーンコーダー、ブルーコーダ、イエローコーダ、レッドコーダーと呼ばれます。アルゴリズムのコンテストをやってる人には、「はじめましての」の挨拶代わりに「おまえ何色?」って聞くこともあります。毎回参加者は1000人程度です。25:35~CodeForcesは、今1番勢いのある競技プログラミングコンテスト!毎週開催されてるのに毎回参加者は6000人~8000人ほど・・・!問題が多いので、一問解けなくても、気にせず次の問題にいけるのが良いところです。レーティングが上下しやすく一度落ちてもすぐに取り戻せるので、気軽に参加できます。23:00AtCoderは日本のアルゴリズムコンテスト!終了後には解説がニコニコ生放送で見れるのが嬉しいです。一般向けのARCがあります。だいたい毎週どちらかのコンテストが開催されています。AtCoderの社長の@chokudaiさんをフォローすると、コンテスト情報が手に入ります。下半分の、1,2...と数字は、1が1番簡単な問題、2が2番目に簡単な問題、という様な見方になっています。下にいけばいくほど、難しい問題です。難しい問題はとけないのでなんとなくでつけてますが、よかったら参考にしてください。これ以外にも、年に一度など、イベント開催されるコンテストが多数あります。おすすめイベント型アルゴリズムコンテストICFPC1年に一度、エンジニアが集まってコンパイラ書いたり、(」・ω・)」うー!(/・ω・)/にゃー!したりする、お祭りです。3日間でグループを組んでやるコンテストで、エンジニア総合力が試されます。Jam私の知る限りで参加者が最多(n万人)のコンテストです。慣れてきて、もう少し強くなりたいと思ったら、アルゴリズムを学ぶために本を読む!!!アルゴリズムコンテストのオススメ本アルゴリズムコンテストをはじめたばかりの人にはこちらがおすすめ。見るアルゴリズムコンテストの探し方コンテストがいつあるかは、TopCoder部のカレンダーで確認しましょう。Googleカレンダーと同期するのがおすすめです。TopCoder部ゲームAIコンテスト次はゲームのAIコンテストです。対戦ゲームで、強いAIを作るコンテスト。1~2週間のコンテストが多く、気軽に始められるので、社会人の娯楽にピッタリ。文字ではなかなか表せないので、まずはどんなコンテストがあるのか動画を見てみましょう。こちらは実際に最近あったコンテストのゲームです。できないスプラトゥーンみたいなゲームで、マスを自分の色に染めるゲームです。マスを8方向囲うと塗りつぶせます。塗り潰したら勝ちです。codingame先ほどの動画のコンテストが開催されてたのが、codingameです。月に1回程度、1日から1週間とかのコンテストを開催しています。他人と戦っているところがビジュアライズされるので、ゲームAIを書くというよりも、ゲームをしてる!という感じで遊べます。VSは、去年から社会人参加okになったAIのコンテスト。現在は前回と前々回の問題がプレイできます。本選がニコファーレで開催されるため、ニコニコ生放送デビューできます。開催期間は1ヶ月、年に一度(今までに5回)開催されていますが、次回コンテストは未定です。こちらは一昨年のコンテストの様子です。私はゲームAIは強くないので、参考になるかはわかりませんが、おすすめの勉強法はこんな感じです。強い人のアルゴリズムを、コードを見ながら学ぶつぎ、ちょっと専門知識がいるコンテストを紹介していきます。ScienceデータマイニングといえばKaggle.Kaggleはデータマイニングの精度の良さを競うのですが、コンテストというよりも、どちらかといえば外注を請け負ったと考えて参加するのがよいかもしれません。たくさんの企業が、解いて欲しい問題を提供しています。「外注」なだけあって、上位入賞者の賞金は高いです。賞金総額が10万ドル、なんてこと珍しくありません。常時10個程度のコンテストが開催されています。賞金なしの、楽しむためのコンテストも準備されています。開催期間は数ヶ月の物が多いです。参考にさせていただいたサイトを紹介させていただきます。#1サーバ/インフラのコンテストサーバインフラと分類してみましたが、紹介するのは、ISUCONと呼ばれる、ウェブサービスを高速化するコンテストです。ISUCONISUCONでは、1台もしくは複数台のサービスが動いているマシンを与えられ、一定時間に1番多くのリクエストを捌いたチームの勝ち!具体的には、ミドルウェアの設定/データベースの高速化などを行っていきます。Web業界の猛者たちが集まります。年に1度開催されており、今年のコンテストは既に終了してしまいました。出たことがない方は是非来年挑戦してみてください。ISUCON勉強法まずは過去問を解いてみましょう。ISUCONの公式サイト過去のコンテストのAWS/GCEのマシンイメージが公開されています。今年の予選には約300組が参加し、約100の参加エントリが投稿されています。参加者のつまづいたところや解決方法を参考にしながらまた過去問を解いてみましょう。参加者のブログを見ればありがたいお話がたくさんあるはずですが、インフラド素人からISUCONに参加するようになるまでの間に読んだ本です。Flag)呼ばれるコンテスト群があります。CTFには主にクイズ形式と攻防戦方式の2つの形式のコンテストがあります。SECCONに関しては、私は予選にちょっと出たことが有るくらいで、ほとんど経験がないため、参考になりそうなページをまず置いておきます。Yakurawww.slideshare.netSECCON日本でCTFで有名なのはSECCONです。12/5~6にオンライン予選が開催されます。問題数も多く、1人で解くのは無理なので、いろんな分野が得意人をあつめてグループで参加しましょう。exeファイルがおちてきたりするのでWindows環境もあったほうがいい気がします。攻撃をする側になることで、普段から気をつけなければならないことにも気がつけるようになるかもしれないです。CTFは私の中で今から勉強したいコンテストNo1です。勉強するぞ!CTF勉強方法クイズ形式のCTFについては、以下で問題演習ができます。ここで演習をするところからはじめましょう。単行本(ソフトカバー)この商品を含むブログを見るでも予約してたのにまだ届いてない!!!!!!!!!!!!これから始める人に参考になりそうなスライドも紹介しておきます。cocoa_dahliawww.slideshare.net伝えたいことさいごにスライドのほうがだいぶ伸びてたので、あらためてブログ書かなくてもいいかな...と思ったけど、スライドだけだと伝えきれないことも多いので、書き上げました。普段からコンテストをやっている人がちがうコンテストにも参加してみるきっかけに、なったら良いなと思います。間違っている部分等ありましたら是非コメントをください。_)*1:アイディアを競うようなコンテスト、イベントについては紹介しません。本選参加してきました。アジア地区東京大会が開催されました。#pyconjpPyConJP2014で競技プログラミングについてLTしてきました。発...2014-02-15プログラミングの基礎ひと通り勉強したくて読んだ本まとめコンピュータの基礎とか勉強するのによさそうな本です。読者になる他の活動場所Coco*Dripsひよこ、通勤中。-様々なプログラミングコンテストとそのはじめ方-Searchスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。