SlideShare a Scribd company logo
1 of 69
Download to read offline
2012/09/16 情報科学若手の会




       勉強か?趣味か?人生か?
      プログラミングコンテストとは




                      東京大学 修士 2 年

                  秋葉 拓哉
自己紹介


 • 秋葉拓哉 (@iwiwi)
   – 東京大学 修士 2 年 (博士進学予定)
   – DB 系グラフアルゴリズムの研究

 • プログラミングコンテストガチ勢
   – TopCoder レーティング 3035 (いわゆるレッドコーダー)
   – 世界的コンテストの決勝進出 10 回
   – トップ 10 入り 4 回




        銅メダル (2012)     世界 7 位 (2011)   世界 9 位 (2010)
       日本人のメダルは 9 年ぶり   世界 9 位 (2009)
                                                        1
自己紹介


  プログラミングコンテストチャレンジブック




       累計一万部突破   韓国・台湾の翻訳版
                  (中国版も翻訳中)




                              2
今日の目標


   プログラミングコンテストは
     アツい!おもろい!


   関心と理解を持ってもらう!


  <学生>     <先生>    <社会人>
  ちょっと     参加を     採用で評価
 やろうかな?   促そうかな?   してみるか?

                            3
プログラミングコンテスト紹介


         プログラミングコンテストとは
    「プログラミングでやるスポーツ」

 • 開始と共に問題が出題される
 • 問題を解くプログラムを作成する
 • 時間内に,出来るだけ多く




    問題           解く       順位
                               4
プログラミングコンテスト紹介

           解答                         問題
  #include <iostream>
                                 標準入力に,2 つの正整数が
  int main() {
    int a, b;                    与えられます.
    cin >> a >> b;               その和を標準出力に出力して
    cout << a + b << endl;       ください.
    return 0;
  }




      ジャッジサーバ


                             自動でコンパイル・テスト
                             即座に正誤判定・順位表更新

                                                  5
プログラミングコンテストの楽しさ




          頭がオカシイのでは?
          言われたプログラム作るだけじゃん
 ( ゚д゚)   楽しいの?課題と何が違うわけ?




                             6
プログラミングコンテストの楽しさ




          頭がオカシイのでは?
          言われたプログラム作るだけじゃん
 ( ゚д゚)   楽しいの?課題と何が違うわけ?




                             7
プログラミングコンテストの楽しさ




      楽しい!!
         頭がオカシイのでは?
         言われたプログラム作るだけじゃん
     世界中の人を惹きつけるに
 ( ゚д゚)  楽しいの?課題と何が違うわけ?

      足る理由があります


                            8
プログラミングコンテストの楽しさ


 • ゲーム的な楽しさ
  – 時間制限の中で急いでプログラムを書く
  – 即採点,即順位更新,リアルタイム
  – インターネット越しに世界中の数千人と対戦

 • 情報科学的な楽しさ
   – アルゴリズムを考えるのが楽しい
   – プログラミングが楽しい




                           9
プログラミングコンテストの楽しさ


 • ゲーム的な楽しさ
  – 時間制限の中で急いでプログラムを書く
  – 即採点,即順位更新,リアルタイム
  – インターネット越しに世界中の数千人と対戦

 • 情報科学的な楽しさ
   – アルゴリズムを考えるのが楽しい
   – プログラミングが楽しい




                           10
問題の例




• 𝑛 匹のアリが 1 cm/s で歩く
• 初期位置が入力される,向きを我々が決める

• ぶつかったら反対を向いて歩き出す
• 端まで行くと落っこちる

• アリが全滅するまでの時間を最大化したい
• 𝒏 ≤ 𝟏𝟎
                         11
問題の例




  t=0




   0    1   2   3   4   5   6   7   8   9   10




                                                 12
問題の例




  t=1




   0    1   2   3   4   5   6   7   8   9   10




                                                 13
問題の例




  t=2




   0    1   2   3   4   5   6   7   8   9   10




                                                 14
問題の例




  t=2




   0    1   2   3   4   5   6   7   8   9   10




                                                 15
問題の例




  t=3




   0    1   2   3   4   5   6   7   8   9   10




                                                 16
問題の例




  t=3




   0    1   2   3   4   5   6   7   8   9   10




                                                 17
問題の例




  t=4




   0    1   2   3   4   5   6   7   8   9   10




                                                 18
問題の例




  t=5




   0    1   2   3   4   5   6   7   8   9   10




                                                 19
問題の例




  t=6




   0    1   2   3   4   5   6   7   8   9   10




                                                 20
問題の例




  t=7




   0    1   2   3   4   5   6   7   8   9   10




                                                 21
問題の例




  t=8




   0    1   2   3   4   5   6   7   8   9   10




                                                 22
問題の例


 全探索のアルゴリズム
  全ての向きの候補に対してシミュレーションを
  行い,最大の時間を求める


 向きの候補は全部で 2 𝑛 通り
 10匹なら…… 210 = 1024 通り




                          23
問題の例




• 𝑛 匹のアリが 1 cm/s で歩く
• 初期位置が入力される,向きを我々が決める

• ぶつかったら反対を向いて歩き出す
• 端まで行くと落っこちる

• アリが全滅するまでの時間を最大化したい
• 𝒏 ≤ 𝟏𝟎
                         24
問題の例 2




• 𝑛 匹のアリが 1 cm/s で歩く
• 初期位置が入力される,向きを我々が決める

• ぶつかったら反対を向いて歩き出す
• 端まで行くと落っこちる

• アリが全滅するまでの時間を最大化したい
• 𝒏 ≤ 𝟏000
                         25
問題の例 2


 全探索のアルゴリズム
   全ての向きの候補に対してシミュレーションを
   行い,最大の時間を求める


 向きの候補は全部で 2 𝑛 通り
 1000匹なら…… 21000 ≒ 10300 通り
             天文学的数字 !
         (宇宙の年齢 ≒ 4.3 × 1017 秒)


                                  26
27
28
29
30
31
32
33
問題の例 2


   よく考えると,アリを区別する必要がない




                         34
問題の例2


 衝突を考える必要が実は全くない!

 効率の良いアルゴリズム
   各アリから遠い方の端までの距離の最大値


 𝑂(𝑛) 時間しかかからない
 1000匹居ても超余裕!



                         35
プログラミングコンテストで問われるもの


アルゴリズム設計とプログラミングの複合競技

               問題


          アルゴリズム設計



           プログラム実装

                      36
プログラミングコンテストで問われるもの


   アルゴリズム設計 のために必要なもの

 大きく分けると 2 つ
 1. 幅広い知識
  – 基礎的なアルゴリズムの知識
    • データ構造,グラフ,連立方程式,…
  – 設計技法,その実例
    • 動的計画法,貪欲法,ネットワークフロー,……

 2. 柔軟な思考力・経験
  – 実際にアルゴリズムを設計する
                               37
プログラミングコンテストで問われるもの


   アルゴリズム設計 の知識を得る方法

 • 大学の授業?有名な教科書?
  – 知識についてのみカバーされる

 • 本「アルゴリズムデザイン」
  – 設計技法について詳しく扱う珍しい本

 • アルゴリズムの適用法,組合せ方
 • 細かいテクニック
 • 少し進んだアルゴリズム
 こういった物を知るには昔は苦労がつきなかったが……!
                              38
プログラミングコンテストで問われるもの


      プログラム実装          のために必要なもの

 • 実装に関する能力
  –   スラスラと書く
      •   言語への慣れ,見通し
  –   コンパクトに書く
      •   標準ライブラリの活用,抽象化
  –   正確に実装する
      •   間違いやすい部分に気づく,無理に短くしない


 • デバッグに関する能力
  –   すぐに間違っている部分を特定する
  –   デバッグしやすいテストケースを考える
                                   39
プログラミングコンテストで問われるもの


    プログラム実装      のために必要なもの

 • 実装が楽なアルゴリズムを選択する
   – アルゴリズムを思いついても,満足しない
   – もっと簡単に実装できる別解を探る

  – 制約が緩ければ,逆に計算量や精度が悪くし
    てでもシンプルにして実装を楽に




                             40
プログラミングコンテストで問われるもの


アルゴリズム設計とプログラミングの複合競技

      問題


 アルゴリズム設計



  プログラム実装

                      41
プログラミングコンテストで問われるもの


アルゴリズム設計とプログラミングの複合競技

      問題

               やらない人には意外な事実?
 アルゴリズム設計
               この部分の方が差がつく

                アルゴリズムの方が難易度の幅が大きい
  プログラム実装       強い人には一瞬でも,
                苦手な人はいつまで経っても解けなかったり


                                  42
プログラミングコンテストの
     真相!




                43
プログラミングコンテストの真相 1


    どのコンテストが一番凄いの?




  まずは色々なコンテストを紹介!




                     44
プログラミングコンテスト


 ACM/ICPC
 • 大学対抗プログラミングコンテスト
 • 1970 年開始,最も歴史がある
 • 世界約 2000 大学から 20000 人以上が参加!

 • 3 人 1 チームのチーム戦




                                 45
アジア地区大会 東京サイト (2009)




                       46
世界大会 (2009 中国ハルビン)




                     47
プログラミングコンテスト


 Google Code Jam

 • Google の開催するコンテスト
 • 世界中から 10000 人以上が参加


 TopCoder
 • インターネットで定期的に開催される
 • 参加者にはレーティングが付き評価される
 • 毎年 1 度,アメリカで世界大会


                         48
TopCoder Open 2011




                     49
TopCoder Open 2011




                     50
プログラミングコンテストの真相 1


    どのコンテストが一番凄いの?
 • 現在 ACM-ICPC の知名度・評価がダントツ
   – 歴史がある?
   – 規模が大きい?

 • これに僕は異議を唱えたい!
 • 他の世界的コンテストも知って,それらでの戦
   果も正当に評価してほしい!


                              51
プログラミングコンテストの真相 1


      どのコンテストが一番凄いの?
 ACM-ICPC の最大の問題点:歪んだルール
 •   大学,地域ごとの格差がメチャクチャ
 •   例えば,大学ごとに進出校数制限
 •   東大からの世界大会進出は超絶大変
 •   他校の世界大会進出チームは,東大の敗退チー
     ムより下位なことがよくある
     – 従って,「世界大会進出」の背景が全然違う

 また,年齢制限・回数制限なども厳しいため,例
 えば優勝者が本当に時点最強と言えない
                              52
プログラミングコンテストの真相 1


     どのコンテストが一番凄いの?
 一方で,世界的なインターネット予選で純粋に上
  から選抜されるシステムは超公平

 • TopCoder Open
   – ほぼ全人類が参加可! (スタッフ以外)
 • Google Code Jam,Facebook Hacker Cup
   – 社員以外参加可!
 ただし 18 歳以上



                                         53
プログラミングコンテストの真相 1


     どのコンテストが一番凄いの?
 ACM-ICPC の他の問題点
 • 問題が面白くない
   – アルゴリズム的な面白さが重視されていない
   – 実装するだけの問題ばかり

 • 問題の準備が適当
   – 世界大会でも入力データにミス (最近だと 2007 年問題 J)
   – しかも無視し結果はそのまま,公式サイトには情報なし
   – 当時の掲示板カキコで見れる http://bit.ly/RZGqfE



                                          54
プログラミングコンテストの真相 1


    どのコンテストが一番凄いの?
 ACM-ICPC は裾野が広いのが素晴らしい

 • 大学対抗,年に 1 回
 • ACM が後援で先生方も応援してくれる
 • 予選は問題も日本語
 • 予選を突破すると日本の地区予選に行ける
   – トップ 100 人ぐらい
   – 他の大会では旅行が伴うのはかなり上のみ

 参加の価値は依然として高い
                           55
プログラミングコンテストの真相 2


  「レッドコーダー」は本当に凄い?
 レッドコーダーとは?
 • TopCoder では,レーティング (評価値) に応じて,
   名前に色がつく
 • レーティングが 2200 に到達し赤色になった人のこと




                                    56
プログラミングコンテストの真相 2


  「レッドコーダー」は本当に凄い?
 • 世界に約 300 人,上位 3 %に相当
 • 日本には現在 26 人
   –   ちなみに,俺がはじめた頃は 4 人とか
   –   本当に神だと思って憧れてた,崇めてた
   –   信じられないような速度・正確性
   –   安定した上位
   –   自分がそうなれる日が来ると思ってなかった



                              57
プログラミングコンテストの真相 2


  「レッドコーダー」は本当に凄い?
 ……でも実はもっと遥かに凄い集団が!!!
               その名も「ターゲット」
 • レーティングが 3000 に到達した人のこと
 • 名前の左側のインジケータが満タンになる
   – 射的の的(=ターゲット)になる
                                     ↓ レッドコーダー (溜りかけ)
 • 世界に 18 人,上位 0.2%!
   – レッドコーダー (= 上位 3%) のさらに上位 6%
                                       ↓ ターゲット(満タン)
 • 日本には 3 人!
   – lyrically, wata, 俺 (+ rng_58)

                                                      58
プログラミングコンテストの真相 3


     トップ選手はどのように育つ?
 • コンテストにおける実力の差は絶大
   – トップ層は安定して常に上位をとり続ける

 • トップの中のトップ選手
  やってる人で知らない人は居ない.普段1位を取っても誰も驚かない.)

   – 3位:Petr (ロシア, 現 3489, 最高 3923)
     • 落ち着きがヤバイ.着実な感じ.
   – 2位:ACRush (中国, 現 3511, 最高 3902)
     • 勢いがヤバイ.怖い.結構ミスってオモロイ.
   – 1位:tourist (ベラルーシ, 現 3583, 最高 3656)
     • 最近では人類最強,何とまだ高校生…

                                           59
プログラミングコンテストの真相 3


    トップ選手はどのように育つ?
 そこまでじゃなくても,世界大会に進出していく
 ようなトップ層はどうやって生まれる?




                          60
プログラミングコンテストの真相 3


    トップ選手はどのように育つ?
 そこまでじゃなくても,世界大会に進出していく
 ようなトップ層はどうやって生まれる?



     修行あるのみ!!
     問題を解きまくる!!

                          61
プログラミングコンテストの真相 3


      トップ選手はどのように育つ?




                10000 問解きました

   tourist さん




                               62
プログラミングコンテストの真相 3


    トップ選手はどのように育つ?
 • 闇雲に解けば良いという物ではない
   – 丁度いい難易度&質の良い問題
   – ただ解くだけじゃなく,最大限に知見を得る


 • 仲間の存在が重要かも?
   – 解法や実装についての議論
   – アイツに差をつけるんだ!って解きまくる
   – 俺は岩田,北川(アリ本の人たち)とかなり一
     緒にやってた
                             63
プログラミングコンテストの真相 4


        日本はなぜ強豪国に?
 • 現在,日本は国別ランク 4 位
   – 特に東京大学は大学ランク 1 位 (冒頭)
   – 一方,僕がはじめた 5 年前はトップ 10 圏外


 • 一体何が起きたのか?




                                64
プログラミングコンテストの真相 4


        日本はなぜ強豪国に?
 • コミュニティ形成・拡大
   – コンテストをやる人自体が増えた
   – テクニックや知識も簡単に手に入る

 • 強者登場 → 憧れて練習,の良い循環

 努力だけなら一人でもできる?     →   ×
 トップ層は,かなりの時間をコンテストに捧げる
  割り切った生活になる.心強さが全然違う.


                            65
プログラミングコンテストの真相 5


   コンテスト勢の得意と不得意は?
 基本的にはコンテストで問われるか否か
 • 得意
   – アルゴリズム
   – プロトタイピング
   – ややこしいルーチンの正確な実装
 • 苦手
   – 大規模なソフトウェアの設計・実装・メンテ
     • コンテスト以外でこういうそういうことをやっている人も居
       るとは思います
                                 66
プログラミングコンテストの真相 6


      勉強か?趣味か?人生か?




                     67
プログラミングコンテストの真相 6


         勉強か?趣味か?人生か?

          もちろん全部!
           (ありきたりな答えですみません……)
 • 勉強!
   – 色々な能力が間違いなくついた
 • 趣味!
   – ちょー楽しい
 • 人生!
   – 一時期は熱中していて,本当にコンテスト=人生
   – そうじゃない今でも,人生への影響は絶大
     • コンテスト好きをこじらせてアルゴリズム研究
     • かけがえのない人間関係や機会,経験


                                68

More Related Content

What's hot

指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門Yoichi Iwata
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムTakuya Akiba
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドMasaki Hara
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろHiroshi Yamashita
 
組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画までShunji Umetani
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)AtCoder Inc.
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Inc.
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~Takuya Akiba
 
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』Proktmr
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -MITSUNARI Shigeo
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題tmaehara
 

What's hot (20)

指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
Chokudai search
Chokudai searchChokudai search
Chokudai search
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 
組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第四回講義資料(ワークスアプリケーションズ & AtCoder)
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
RMQ クエリ処理
RMQ クエリ処理RMQ クエリ処理
RMQ クエリ処理
 
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
 

Similar to 勉強か?趣味か?人生か?―プログラミングコンテストとは

金大アルゴリズム勉強会#001資料
金大アルゴリズム勉強会#001資料金大アルゴリズム勉強会#001資料
金大アルゴリズム勉強会#001資料Takumi Murano
 
Pythonではじめる競技プログラミング
Pythonではじめる競技プログラミングPythonではじめる競技プログラミング
Pythonではじめる競技プログラミングcocodrips
 
第21回アルゴリズム勉強会
第21回アルゴリズム勉強会第21回アルゴリズム勉強会
第21回アルゴリズム勉強会Yuuki Ono
 
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)Kensuke Otsuki
 
遺伝的アルゴリズム (Genetic Algorithm)を始めよう! 【簡略版】
遺伝的アルゴリズム(Genetic Algorithm)を始めよう! 【簡略版】遺伝的アルゴリズム(Genetic Algorithm)を始めよう! 【簡略版】
遺伝的アルゴリズム (Genetic Algorithm)を始めよう! 【簡略版】Kazuhide Okamura
 
Arduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみようArduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみようHiromu Yakura
 
Optimization night 4_dp
Optimization night 4_dpOptimization night 4_dp
Optimization night 4_dpKensuke Otsuki
 
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”Hideo Terada
 
今日からはじめる微分方程式
今日からはじめる微分方程式今日からはじめる微分方程式
今日からはじめる微分方程式Ryo Kaji
 
第4回すくすく・スクラム TheKanbanGame
第4回すくすく・スクラム TheKanbanGame第4回すくすく・スクラム TheKanbanGame
第4回すくすく・スクラム TheKanbanGameKazumasa EBATA
 
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​SSII
 
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューMoriharu Ohzu
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Inc.
 
プログラミング勉強会
プログラミング勉強会プログラミング勉強会
プログラミング勉強会ssuser50bb47
 
Operations research yonezawa_no1
Operations research yonezawa_no1Operations research yonezawa_no1
Operations research yonezawa_no1ssuser0bebd2
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)Kensuke Otsuki
 

Similar to 勉強か?趣味か?人生か?―プログラミングコンテストとは (20)

金大アルゴリズム勉強会#001資料
金大アルゴリズム勉強会#001資料金大アルゴリズム勉強会#001資料
金大アルゴリズム勉強会#001資料
 
Pythonではじめる競技プログラミング
Pythonではじめる競技プログラミングPythonではじめる競技プログラミング
Pythonではじめる競技プログラミング
 
210122 msi dp
210122 msi dp210122 msi dp
210122 msi dp
 
第21回アルゴリズム勉強会
第21回アルゴリズム勉強会第21回アルゴリズム勉強会
第21回アルゴリズム勉強会
 
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
 
遺伝的アルゴリズム (Genetic Algorithm)を始めよう! 【簡略版】
遺伝的アルゴリズム(Genetic Algorithm)を始めよう! 【簡略版】遺伝的アルゴリズム(Genetic Algorithm)を始めよう! 【簡略版】
遺伝的アルゴリズム (Genetic Algorithm)を始めよう! 【簡略版】
 
Arduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみようArduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみよう
 
Optimization night 4_dp
Optimization night 4_dpOptimization night 4_dp
Optimization night 4_dp
 
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”
 
今日からはじめる微分方程式
今日からはじめる微分方程式今日からはじめる微分方程式
今日からはじめる微分方程式
 
第4回すくすく・スクラム TheKanbanGame
第4回すくすく・スクラム TheKanbanGame第4回すくすく・スクラム TheKanbanGame
第4回すくすく・スクラム TheKanbanGame
 
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
 
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビュー
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
 
プログラミング勉強会
プログラミング勉強会プログラミング勉強会
プログラミング勉強会
 
Operations research yonezawa_no1
Operations research yonezawa_no1Operations research yonezawa_no1
Operations research yonezawa_no1
 
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pubScrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
 
明治大の活動2
明治大の活動2明治大の活動2
明治大の活動2
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
 
Tokyo r50 beginner_2
Tokyo r50 beginner_2Tokyo r50 beginner_2
Tokyo r50 beginner_2
 

More from Takuya Akiba

分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17Takuya Akiba
 
Learning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for GraphsLearning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for GraphsTakuya Akiba
 
TCO15 Algorithm Round 2C 解説
TCO15 Algorithm Round 2C 解説TCO15 Algorithm Round 2C 解説
TCO15 Algorithm Round 2C 解説Takuya Akiba
 
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説Takuya Akiba
 
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法Takuya Akiba
 
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-Takuya Akiba
 
Cache-Oblivious データ構造入門 @DSIRNLP#5
Cache-Oblivious データ構造入門 @DSIRNLP#5Cache-Oblivious データ構造入門 @DSIRNLP#5
Cache-Oblivious データ構造入門 @DSIRNLP#5Takuya Akiba
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズムTakuya Akiba
 
大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズムTakuya Akiba
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端Takuya Akiba
 

More from Takuya Akiba (10)

分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
 
Learning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for GraphsLearning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for Graphs
 
TCO15 Algorithm Round 2C 解説
TCO15 Algorithm Round 2C 解説TCO15 Algorithm Round 2C 解説
TCO15 Algorithm Round 2C 解説
 
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
 
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法
 
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
 
Cache-Oblivious データ構造入門 @DSIRNLP#5
Cache-Oblivious データ構造入門 @DSIRNLP#5Cache-Oblivious データ構造入門 @DSIRNLP#5
Cache-Oblivious データ構造入門 @DSIRNLP#5
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端
 

勉強か?趣味か?人生か?―プログラミングコンテストとは

  • 1. 2012/09/16 情報科学若手の会 勉強か?趣味か?人生か? プログラミングコンテストとは 東京大学 修士 2 年 秋葉 拓哉
  • 2. 自己紹介 • 秋葉拓哉 (@iwiwi) – 東京大学 修士 2 年 (博士進学予定) – DB 系グラフアルゴリズムの研究 • プログラミングコンテストガチ勢 – TopCoder レーティング 3035 (いわゆるレッドコーダー) – 世界的コンテストの決勝進出 10 回 – トップ 10 入り 4 回 銅メダル (2012) 世界 7 位 (2011) 世界 9 位 (2010) 日本人のメダルは 9 年ぶり 世界 9 位 (2009) 1
  • 3. 自己紹介 プログラミングコンテストチャレンジブック 累計一万部突破 韓国・台湾の翻訳版 (中国版も翻訳中) 2
  • 4. 今日の目標 プログラミングコンテストは アツい!おもろい! 関心と理解を持ってもらう! <学生> <先生> <社会人> ちょっと 参加を 採用で評価 やろうかな? 促そうかな? してみるか? 3
  • 5. プログラミングコンテスト紹介 プログラミングコンテストとは 「プログラミングでやるスポーツ」 • 開始と共に問題が出題される • 問題を解くプログラムを作成する • 時間内に,出来るだけ多く 問題 解く 順位 4
  • 6. プログラミングコンテスト紹介 解答 問題 #include <iostream> 標準入力に,2 つの正整数が int main() { int a, b; 与えられます. cin >> a >> b; その和を標準出力に出力して cout << a + b << endl; ください. return 0; } ジャッジサーバ 自動でコンパイル・テスト 即座に正誤判定・順位表更新 5
  • 7. プログラミングコンテストの楽しさ 頭がオカシイのでは? 言われたプログラム作るだけじゃん ( ゚д゚) 楽しいの?課題と何が違うわけ? 6
  • 8. プログラミングコンテストの楽しさ 頭がオカシイのでは? 言われたプログラム作るだけじゃん ( ゚д゚) 楽しいの?課題と何が違うわけ? 7
  • 9. プログラミングコンテストの楽しさ 楽しい!! 頭がオカシイのでは? 言われたプログラム作るだけじゃん 世界中の人を惹きつけるに ( ゚д゚) 楽しいの?課題と何が違うわけ? 足る理由があります 8
  • 10. プログラミングコンテストの楽しさ • ゲーム的な楽しさ – 時間制限の中で急いでプログラムを書く – 即採点,即順位更新,リアルタイム – インターネット越しに世界中の数千人と対戦 • 情報科学的な楽しさ – アルゴリズムを考えるのが楽しい – プログラミングが楽しい 9
  • 11. プログラミングコンテストの楽しさ • ゲーム的な楽しさ – 時間制限の中で急いでプログラムを書く – 即採点,即順位更新,リアルタイム – インターネット越しに世界中の数千人と対戦 • 情報科学的な楽しさ – アルゴリズムを考えるのが楽しい – プログラミングが楽しい 10
  • 12. 問題の例 • 𝑛 匹のアリが 1 cm/s で歩く • 初期位置が入力される,向きを我々が決める • ぶつかったら反対を向いて歩き出す • 端まで行くと落っこちる • アリが全滅するまでの時間を最大化したい • 𝒏 ≤ 𝟏𝟎 11
  • 13. 問題の例 t=0 0 1 2 3 4 5 6 7 8 9 10 12
  • 14. 問題の例 t=1 0 1 2 3 4 5 6 7 8 9 10 13
  • 15. 問題の例 t=2 0 1 2 3 4 5 6 7 8 9 10 14
  • 16. 問題の例 t=2 0 1 2 3 4 5 6 7 8 9 10 15
  • 17. 問題の例 t=3 0 1 2 3 4 5 6 7 8 9 10 16
  • 18. 問題の例 t=3 0 1 2 3 4 5 6 7 8 9 10 17
  • 19. 問題の例 t=4 0 1 2 3 4 5 6 7 8 9 10 18
  • 20. 問題の例 t=5 0 1 2 3 4 5 6 7 8 9 10 19
  • 21. 問題の例 t=6 0 1 2 3 4 5 6 7 8 9 10 20
  • 22. 問題の例 t=7 0 1 2 3 4 5 6 7 8 9 10 21
  • 23. 問題の例 t=8 0 1 2 3 4 5 6 7 8 9 10 22
  • 24. 問題の例 全探索のアルゴリズム 全ての向きの候補に対してシミュレーションを 行い,最大の時間を求める 向きの候補は全部で 2 𝑛 通り 10匹なら…… 210 = 1024 通り 23
  • 25. 問題の例 • 𝑛 匹のアリが 1 cm/s で歩く • 初期位置が入力される,向きを我々が決める • ぶつかったら反対を向いて歩き出す • 端まで行くと落っこちる • アリが全滅するまでの時間を最大化したい • 𝒏 ≤ 𝟏𝟎 24
  • 26. 問題の例 2 • 𝑛 匹のアリが 1 cm/s で歩く • 初期位置が入力される,向きを我々が決める • ぶつかったら反対を向いて歩き出す • 端まで行くと落っこちる • アリが全滅するまでの時間を最大化したい • 𝒏 ≤ 𝟏000 25
  • 27. 問題の例 2 全探索のアルゴリズム 全ての向きの候補に対してシミュレーションを 行い,最大の時間を求める 向きの候補は全部で 2 𝑛 通り 1000匹なら…… 21000 ≒ 10300 通り 天文学的数字 ! (宇宙の年齢 ≒ 4.3 × 1017 秒) 26
  • 28. 27
  • 29. 28
  • 30. 29
  • 31. 30
  • 32. 31
  • 33. 32
  • 34. 33
  • 35. 問題の例 2 よく考えると,アリを区別する必要がない 34
  • 36. 問題の例2 衝突を考える必要が実は全くない! 効率の良いアルゴリズム 各アリから遠い方の端までの距離の最大値 𝑂(𝑛) 時間しかかからない 1000匹居ても超余裕! 35
  • 38. プログラミングコンテストで問われるもの アルゴリズム設計 のために必要なもの 大きく分けると 2 つ 1. 幅広い知識 – 基礎的なアルゴリズムの知識 • データ構造,グラフ,連立方程式,… – 設計技法,その実例 • 動的計画法,貪欲法,ネットワークフロー,…… 2. 柔軟な思考力・経験 – 実際にアルゴリズムを設計する 37
  • 39. プログラミングコンテストで問われるもの アルゴリズム設計 の知識を得る方法 • 大学の授業?有名な教科書? – 知識についてのみカバーされる • 本「アルゴリズムデザイン」 – 設計技法について詳しく扱う珍しい本 • アルゴリズムの適用法,組合せ方 • 細かいテクニック • 少し進んだアルゴリズム こういった物を知るには昔は苦労がつきなかったが……! 38
  • 40. プログラミングコンテストで問われるもの プログラム実装 のために必要なもの • 実装に関する能力 – スラスラと書く • 言語への慣れ,見通し – コンパクトに書く • 標準ライブラリの活用,抽象化 – 正確に実装する • 間違いやすい部分に気づく,無理に短くしない • デバッグに関する能力 – すぐに間違っている部分を特定する – デバッグしやすいテストケースを考える 39
  • 41. プログラミングコンテストで問われるもの プログラム実装 のために必要なもの • 実装が楽なアルゴリズムを選択する – アルゴリズムを思いついても,満足しない – もっと簡単に実装できる別解を探る – 制約が緩ければ,逆に計算量や精度が悪くし てでもシンプルにして実装を楽に 40
  • 43. プログラミングコンテストで問われるもの アルゴリズム設計とプログラミングの複合競技 問題 やらない人には意外な事実? アルゴリズム設計 この部分の方が差がつく アルゴリズムの方が難易度の幅が大きい プログラム実装 強い人には一瞬でも, 苦手な人はいつまで経っても解けなかったり 42
  • 45. プログラミングコンテストの真相 1 どのコンテストが一番凄いの? まずは色々なコンテストを紹介! 44
  • 46. プログラミングコンテスト ACM/ICPC • 大学対抗プログラミングコンテスト • 1970 年開始,最も歴史がある • 世界約 2000 大学から 20000 人以上が参加! • 3 人 1 チームのチーム戦 45
  • 49. プログラミングコンテスト Google Code Jam • Google の開催するコンテスト • 世界中から 10000 人以上が参加 TopCoder • インターネットで定期的に開催される • 参加者にはレーティングが付き評価される • 毎年 1 度,アメリカで世界大会 48
  • 52. プログラミングコンテストの真相 1 どのコンテストが一番凄いの? • 現在 ACM-ICPC の知名度・評価がダントツ – 歴史がある? – 規模が大きい? • これに僕は異議を唱えたい! • 他の世界的コンテストも知って,それらでの戦 果も正当に評価してほしい! 51
  • 53. プログラミングコンテストの真相 1 どのコンテストが一番凄いの? ACM-ICPC の最大の問題点:歪んだルール • 大学,地域ごとの格差がメチャクチャ • 例えば,大学ごとに進出校数制限 • 東大からの世界大会進出は超絶大変 • 他校の世界大会進出チームは,東大の敗退チー ムより下位なことがよくある – 従って,「世界大会進出」の背景が全然違う また,年齢制限・回数制限なども厳しいため,例 えば優勝者が本当に時点最強と言えない 52
  • 54. プログラミングコンテストの真相 1 どのコンテストが一番凄いの? 一方で,世界的なインターネット予選で純粋に上 から選抜されるシステムは超公平 • TopCoder Open – ほぼ全人類が参加可! (スタッフ以外) • Google Code Jam,Facebook Hacker Cup – 社員以外参加可! ただし 18 歳以上 53
  • 55. プログラミングコンテストの真相 1 どのコンテストが一番凄いの? ACM-ICPC の他の問題点 • 問題が面白くない – アルゴリズム的な面白さが重視されていない – 実装するだけの問題ばかり • 問題の準備が適当 – 世界大会でも入力データにミス (最近だと 2007 年問題 J) – しかも無視し結果はそのまま,公式サイトには情報なし – 当時の掲示板カキコで見れる http://bit.ly/RZGqfE 54
  • 56. プログラミングコンテストの真相 1 どのコンテストが一番凄いの? ACM-ICPC は裾野が広いのが素晴らしい • 大学対抗,年に 1 回 • ACM が後援で先生方も応援してくれる • 予選は問題も日本語 • 予選を突破すると日本の地区予選に行ける – トップ 100 人ぐらい – 他の大会では旅行が伴うのはかなり上のみ 参加の価値は依然として高い 55
  • 57. プログラミングコンテストの真相 2 「レッドコーダー」は本当に凄い? レッドコーダーとは? • TopCoder では,レーティング (評価値) に応じて, 名前に色がつく • レーティングが 2200 に到達し赤色になった人のこと 56
  • 58. プログラミングコンテストの真相 2 「レッドコーダー」は本当に凄い? • 世界に約 300 人,上位 3 %に相当 • 日本には現在 26 人 – ちなみに,俺がはじめた頃は 4 人とか – 本当に神だと思って憧れてた,崇めてた – 信じられないような速度・正確性 – 安定した上位 – 自分がそうなれる日が来ると思ってなかった 57
  • 59. プログラミングコンテストの真相 2 「レッドコーダー」は本当に凄い? ……でも実はもっと遥かに凄い集団が!!! その名も「ターゲット」 • レーティングが 3000 に到達した人のこと • 名前の左側のインジケータが満タンになる – 射的の的(=ターゲット)になる ↓ レッドコーダー (溜りかけ) • 世界に 18 人,上位 0.2%! – レッドコーダー (= 上位 3%) のさらに上位 6% ↓ ターゲット(満タン) • 日本には 3 人! – lyrically, wata, 俺 (+ rng_58) 58
  • 60. プログラミングコンテストの真相 3 トップ選手はどのように育つ? • コンテストにおける実力の差は絶大 – トップ層は安定して常に上位をとり続ける • トップの中のトップ選手 やってる人で知らない人は居ない.普段1位を取っても誰も驚かない.) – 3位:Petr (ロシア, 現 3489, 最高 3923) • 落ち着きがヤバイ.着実な感じ. – 2位:ACRush (中国, 現 3511, 最高 3902) • 勢いがヤバイ.怖い.結構ミスってオモロイ. – 1位:tourist (ベラルーシ, 現 3583, 最高 3656) • 最近では人類最強,何とまだ高校生… 59
  • 61. プログラミングコンテストの真相 3 トップ選手はどのように育つ? そこまでじゃなくても,世界大会に進出していく ようなトップ層はどうやって生まれる? 60
  • 62. プログラミングコンテストの真相 3 トップ選手はどのように育つ? そこまでじゃなくても,世界大会に進出していく ようなトップ層はどうやって生まれる? 修行あるのみ!! 問題を解きまくる!! 61
  • 63. プログラミングコンテストの真相 3 トップ選手はどのように育つ? 10000 問解きました tourist さん 62
  • 64. プログラミングコンテストの真相 3 トップ選手はどのように育つ? • 闇雲に解けば良いという物ではない – 丁度いい難易度&質の良い問題 – ただ解くだけじゃなく,最大限に知見を得る • 仲間の存在が重要かも? – 解法や実装についての議論 – アイツに差をつけるんだ!って解きまくる – 俺は岩田,北川(アリ本の人たち)とかなり一 緒にやってた 63
  • 65. プログラミングコンテストの真相 4 日本はなぜ強豪国に? • 現在,日本は国別ランク 4 位 – 特に東京大学は大学ランク 1 位 (冒頭) – 一方,僕がはじめた 5 年前はトップ 10 圏外 • 一体何が起きたのか? 64
  • 66. プログラミングコンテストの真相 4 日本はなぜ強豪国に? • コミュニティ形成・拡大 – コンテストをやる人自体が増えた – テクニックや知識も簡単に手に入る • 強者登場 → 憧れて練習,の良い循環 努力だけなら一人でもできる? → × トップ層は,かなりの時間をコンテストに捧げる 割り切った生活になる.心強さが全然違う. 65
  • 67. プログラミングコンテストの真相 5 コンテスト勢の得意と不得意は? 基本的にはコンテストで問われるか否か • 得意 – アルゴリズム – プロトタイピング – ややこしいルーチンの正確な実装 • 苦手 – 大規模なソフトウェアの設計・実装・メンテ • コンテスト以外でこういうそういうことをやっている人も居 るとは思います 66
  • 68. プログラミングコンテストの真相 6 勉強か?趣味か?人生か? 67
  • 69. プログラミングコンテストの真相 6 勉強か?趣味か?人生か? もちろん全部! (ありきたりな答えですみません……) • 勉強! – 色々な能力が間違いなくついた • 趣味! – ちょー楽しい • 人生! – 一時期は熱中していて,本当にコンテスト=人生 – そうじゃない今でも,人生への影響は絶大 • コンテスト好きをこじらせてアルゴリズム研究 • かけがえのない人間関係や機会,経験 68