2013/12/19

競技プログラミングへの道標 〜これから始める競技プログラミング〜

本記事は、Competitive Programming Advent Calendar Div2013のDay.19thの投稿記事です。当初予定していた内容「コンテストサイト/オンラインジャッジの比較 〜初心者への道標として〜」をその一部に含みます。

Atcoder Beginner Contestが開催され始めた2013年。競技プログラミングの世界は、リクルート分野での注目もあり、なお一層門戸を広げ始めています。この流れに乗る人に向けて、その最初の数歩の道標を示したい。そんな記事にしたい、と思います。



[入門のための練習]
やり方などは他のサイトでもあるほか、各サイトの説明にもありますので、こちらでは述べません。入門にあたり、それぞれのサイトやコンテストで最も易しいとされるレベルの問題を解いてみるとよいでしょう。ルールの把握と、基礎力の確認です。これが出来ないようであれば、まずはプログラミングの基礎力をつける勉強をすべきだと考えます。

[様々なサイトでの練習〜サイトの比較]
さて、初心者の練習にはいくつかのサイトがありますが、有名どころに絞って幾つか紹介・比較しておきたいと思います。
・Atcoder:日本語の問題で易しいものも多く、言語も比較的多いので最初はこれがおすすめ。
・CodeChef:難易度別で問題を選べるのでやりやすいサイト。対応している言語の多さは随一だが、掲示板は少し荒れているような印象。また、コンテストの時間があまり日本になじまないという難点も…。
・Codeforces:大会数だけで言えばピカイチで、Atcoderと似たような感じで楽しめる。ただ、英語なので苦手な人はまずAtcoderで慣れてから。CodeChefよりはマシだが、やはり日本になじまない時間。
・Topcoder:老舗だが、使える言語が限定的であり、他のサイトとは一線を画すシステムというのもあって、必ずしも今入門にいいとは言えない印象。老舗だけあって質も量も良いし、日本時間で参加しやすい大会もあるが、提出形式などが違うので、まずは他のコンテストだろうか。CodechefやCodeforcesより英語が読みやすいので、英語コンテストの入門としては適する。
・Aizu Online Judge:日本のオンラインジャッジの老舗。日本語の問題も多く、ウォームアップも多いのでAtcoderと併用して入門〜練習に使える。また、英語日本語両方で書かれた問題があるので、英語コンテストの練習にも使いやすいだろうという印象。最初のオンラインジャッジとしておすすめ。
・UVa Online Judge:いろんな本にも取り上げられているオンラインジャッジだが、特別使いやすいという印象はない(POJとかと大きな差があるという印象もない。ただ、活発ではある)。問題を多く解きたい時や、書籍と併用して。
・NPCA Judge:有名かどうかはともかく、今も更新の続いているオンラインジャッジ。高校生の運営だが、なかなか面白いので参考として紹介。


[記事やEditrialを読むという事]
初心者の練習に必要な苦言を(自戒も込めて)呈しますと、「outputだけでなくinputも必要である」という事です。つまり、知識のインプットです。他の人のソースコードを読むということを推奨されている方もいますが、いきなりコードから読んでもとっつきづらい部分があるというのが正直な感想です。まず、下地を作らなければならないと思います。
その下地を作るためには、ソースだけを読むのではなく、問題の解説を読み、そこからソースを丁寧に解釈していくというのがよいでしょう。解説単独で見た場合、Editrialは優れていますが、ソースが掲載されているとは限りません。出来れば、幾つかのブログをめぐるなどして、解説とソースが同時掲載されているものを見つけ、それを読んでみるとよいでしょう。これらによるinputで、少しずつレベルアップをはかるのが良いと思います。

[Communityに参加して]
競技プログラミング愛好者というのは、コンピュータに強いためか、SNSやTwitterをやっている場合も多いです。そういったツールを使って積極的にコミュニケーションをとっていく事で、競技プログラミング自体に関わることからそれ以外のことまで多くの利があると思います。
また、Topcoder部というコミュニティでは、競技プログラミングの情報が集まっており、メンバーに登録しておくと更新情報などが得られて有益です。こちらも良ければ利用してみてください。

[個人的に心がけていること]
個人的に(本当に個人的に)心がけていることを紹介しておきます。
・寒い夜には頭寒足熱を意識し、冷やさない:健康第一です。「湯たんぽプログラミング」もおすすめします。
・眠い時・しんどい時:無理に参加しない。やはり健康第一です。
・積極的に話す:コミュニティ内の人と積極的に話をすることで、得られるものも数多くあります。
・筆記具には万年筆を、キーボードもいい物を使う:基本的には、紙プログラミングも実際のコーディングも、「書く」ものであり、手に負担がかかります。その負担の軽減のためにも、自分にあったキーボードで、出来れば筆圧がなく書ける万年筆などを利用されることをおすすめしたいと思います。使う紙にもこだわるとなお一層良いと思います。

[終わりに]
ここまで、ざっと競技プログラミングをはじめる人への参考のような話を書いてきましたが、参考になったでしょうか?この世界の人が一人でも増えることを願っています。

0 件のコメント:

コメントを投稿