情報オリンピックに参加するには、どうしたらいいの?

◇ 情報オリンピックでは、どんなことを競うの?

 情報オリンピックは、中学生や高校生(主として高校生)向けの「与えられた数理情報科学的な問題をプログラムを作ることによって解決する力を競う知の競技会」です。情報オリンピックでは、  出題される問題は、
  1. サイコロを振るとか、ゲームを行なうとか、交通渋滞の様子を模倣してみるとかのように、さまざまな事象や現象等の模倣(シミュレーション)をプログラムを用いて行なってみることにより答を求める問題
  2. 数理的な問題解決能力や知識を必要とする問題(その問題を解決するためには数学やアルゴリズムに関する知識やセンスが必要とされる問題)
  3. 1. と 2. のミックスした問題(1. によって試行してみて、2. の一般的な解法を推測したり、あるいは確認したりする)
といった「数理的問題解決をプログラムによって行なう能力」を問う類のものです。単に暗記している知識を試す類の問題とか、ウェブのデザイン力とか、何らかの情報発信におけるプレゼンテーションの優劣とかを競う類の問題は出題されません。

◇ 何を勉強したらいいの?

 まず、プログラミングの技能をしっかり身に付けましょう。情報オリンピックの日本国内本選(日本情報オリンピック=JOI)や国際大会(国際情報オリンピック=IOI)で使われるプログラミング言語はC,C++のどちらかということが決まっていますので、どちらか(または両方)を勉強するとよいでしょう。(ただし、日本情報オリンピックの予選では特にプログラミング言語を限定していません。)
 これらのプログラミング言語を勉強するための参考書はたくさん出版されています。 書店で手にとってみて、自分にとってわかりやすいものをまず使ってみるのがよいでしょう。
 知人等にプログラミングのことを多少なりとも知っている人がいれば、その方のアドバイスを受けてみるのもよいでしょう。通っている中学や高校にコンピュータクラブのようなものがあるなら、そこに参加して先輩や同輩や後輩と一緒に勉強するのもよいかもしれません。

◇ どのように勉強したらいいの?

 プログラミングの学習は机上で行うものではなく、実際にコンピュータを使って実習を行いながら習得することが大事です。そのためには、習得するプログラミング言語の開発環境(コンパイラやエディタ等の、必要なソフトウェア群)を自分のコンピュータにインストールすることが必要です。
 例えば、第10回日本情報オリンピック(JOI 2010-2011)の本選では次のような環境が使われました。

ハードウェア
ノート型パーソナルコンピュータ (富士通 FMV-A8290 【FMVNA1CG】)
  • CPU: Intel Core2Duo P8700 2.53GHz
  • メモリ: 2GB
  • ハードディスク: 160GB
ソフトウェア
  • Ubuntu 10.10 Desktop 日本語 Remix
    http://www.ubuntulinux.jp/products/JA-Localized
    (Windows 7 Professional 上で動作する VMware Player 3.1 の仮想マシン)
    練習用仮想マシンをダウンロードできるようにする. ダウンロード用 URL は1月15日頃に本選参加者にメールで通知する.
    ( VMware Player: http://www.vmware.com/jp/products/player/ )
  • gcc/g++ (GCC) 4.4.5
  • gdb 7.2
  • C++ STL Document (英語)
  • Gnu Emacs
  • Vim
  • その他のディストリビューションに含まれるエディタ
 これらのソフトウェアはどれも無料で手に入れることができます。それぞれのウェブサイトで直接確認するとともに、インターネットでいろんなサイトを検索して調べるとよいでしょう。プログラミング言語の参考書ではこれらのことに関しても書かれていることがありますので、参考書を選ぶときに気をつけてみてください。

 プログラミング言語の勉強を一から始めたい人は、グローバルCOE「計算世界観の深化と展開」(拠点リーダー 東京工業大学 渡辺治教授・JOI理事)の自習型C言語速修コースのウェブ教材を利用してみるのも良いと思います。無料ですから、興味のある人は自由に利用してください。

◇ プログラムが少し書けるようになったら・・・

 プログラミングにある程度自信が付いたら、日本情報オリンピックの過去問に挑戦してみましょう。過去の問題に解説を付けたものが情報オリンピック日本委員会のウェブサイトで公開されています。  予選に参加申込をした方には、希望すれば、過去の情報オリンピック(JOIとIOI)の問題と解答・解説をまとめて冊子として印刷したものを無料で差し上げますので、住所氏名と希望する冊子番号をお知らせ下さい。
 〒169-0051
 東京都新宿区西早稲田1-6-3筑波ビル2B
 TEL:03-5272-9794 FAX:03-6736-0510
No 冊  子  名 年 度 ページ数  
1 第1回〜第8回 国際情報オリンピック 問題と解説(日本語) 1989〜1996 174ページ 残部少数
2 第1回〜第4回 日本情報オリンピック問題と解答 1994〜1997 235ページ 残部なし
3 第5回 日本情報オリンピック問題と解答 2005 45ページ 残部なし

 これらの問題を解いてみると、プログラミングの技能だけでなく、アルゴリズムとかデータ構造ということについても勉強する必要があることが、自然とわかってくるでしょう。

◇ アルゴリズムとかデータ構造などについて勉強するには・・・

 アルゴリズムの設計に関する一般論、個々の具体的な問題に対するさまざまなアルゴリズムの例、良いアルゴリズムを設計するために必要な(役立つ)データ構造に関する解説などを含む参考書をいくつか挙げておきます。*印を付けたものは特に奨められます。
  1. * A.V.エイホー・J.E.ホップクロフト・J.D.ウルマン 著/野崎昭弘 他訳、 『アルゴリズムの設計と解析 I ,II』、サイエンス社、1977. (説明に Algol 風のプログラミング言語を使用)
  2. 茨木俊秀 著、『アルゴリズムとデータ構造』、昭晃堂、1989. (説明にプログラミング言語 Pascal を使用)
  3. 石畑清 著、『アルゴリズムとデータ構造』、岩波書店、1989. (説明にプログラミング言語 Pascal を使用)
  4. N.ヴィルト 著/浦昭二・國府方久史 訳、『アルゴリズムとデータ構造』、近代科学社、1990.(説明にプログラミング言語 Pascal を使用)
  5. 平田富夫 著、『アルゴリズムとデータ構造』、森北出版、1990. (説明にプログラミング言語 Pascal を使用)
  6. 奥村晴彦 著、『C言語による最新アルゴリズム事典』、技術評論社、1991.
  7. 浅野哲夫 著、『データ構造』、近代科学社、1992.(説明にC言語を使用)
  8. * R.セジウィック 著/野下浩平・星守 他訳、『アルゴリズムC++』、近代科学社、1994. (C++を使用)
  9. 近藤嘉雪 著、『定本 Cプログラマのためのアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、1998.
  10. 茨木俊秀 著、『Cによるアルゴリズムとデータ構造』、昭晃堂、1999.(C言語を使用)
  11. Robert Lafore 著/岩谷宏 訳『 Javaで学ぶアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、1999.
  12. 浅野孝夫・今井浩 著、『計算とアルゴリズム』、オーム社、2000. (アルゴリズムの記述は日本語)
  13. 東野勝治・臼田昭司・葭谷安正 著、『C言語によるアルゴリズムとデータ構造入門』、 森北出版、2000.
  14. 杉原厚吉 著、『データ構造とアルゴリズム』、共立出版、2001. (説明にプログラミング言語 Pascal を使用)
  15. 柴田望洋・辻亮介 著、『C言語によるアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、2002.
  16. * 紀平拓男・春日伸弥、『プログラミングの宝箱 アルゴリズムとデータ構造』、 ソフトバンククリエイティブ、2003(C言語、Java).
  17. 矢沢久雄 著、『C言語で学ぶアルゴリズムとデータ構造 基礎の基礎』、ナツメ社、2003.
  18. 奥村晴彦 著、『Javaによるアルゴリズム事典』、技術評論社、2003.
  19. 浅野哲夫・和田幸一・増澤利光 著、『アルゴリズム論』、オーム社、2003. (説明にC言語を使用)
  20. 近藤嘉雪 著、『Javaプログラマのためのアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、2004/03/22
  21. 横森貴 著、『アルゴリズムとデータ構造 計算論』、サイエンス社、2005. (説明にプログラミング言語 Pascal を使用)
  22. * R.セジウィック 著/野下浩平・星守・佐藤創・田口東 訳、『アルゴリズムC・新版』、2004.
  23. 柴田望洋 著、『Javaによるアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、2005.
  24. 柴田望洋・辻亮介 著、『 新版 C言語によるアルゴリズムとデータ構造』、 ソフトバンククリエイティブ、2005.
  25. * 藤原暁宏 著、『アルゴリズムとデータ構造』 (情報工学レクチャーシリーズ)、森北出版、2006年.
  26. * T.コルメン他 著/浅野哲夫・梅尾博司 他訳、『アルゴリズムイントロダクション1・2・3』、近代科学社、1995 / 2007(1・2の和訳).(アルゴリズムに関するバイブルのような大著.辞典説明に仮想的プログラミング言語を使用)
  27. * J.Kleinberg and E.Tardos著/浅野孝夫・浅野泰仁・小野孝男・平田富夫訳、『アルゴリズムデザイン』、共立出版、2008年. (お奨め)
  28. * 秋葉拓哉・岩田陽一・北川宜稔 著、『プログラミングコンテストチャレンジブック』、毎日コミュニケーションズ、2010年9月.
 Pascal はプログラミングの教育用の言語として世界中で広く用いられていたものです(現在では、Delphi がその後継言語です)。C 言語や Java と同様に Algol の流れを汲む言語です。

◇ さあっ、情報オリンピックに挑戦しよう!!

 プログラミングの基本が習得できたら(データ構造や各種のアルゴリズムについて勉強途中であっても)、力試しのつもりで日本情報オリンピックの予選(易しい問題も含まれています)に挑戦してみる価値はあります! 参加料は無料ですし、自宅に居ながら参加することもできますから。
 参加の申し込みは情報オリンピック日本委員会のウェブサイトから行います(2010年度の予選は終了しました)。