時代は数論!今すぐ始められる、簡単☆ProjectEuler入門ガイド

まわりのエンジニアの間でプログラミングコンテストが流行っている。実力を磨くことができるのに加えて客観的に能力を示すことができるのも大きな魅力だと思う。
しかし興味はあるけれどプログラミングコンテストに対して敷居の高さを感じている人も多いのでは。そんなあなたにProjectEuler(プロジェクト・オイラー)!参加の敷居が非常に低く、楽しみながらアルゴリズムや数論の知識も身につくので他のプログラミングコンテストに参加する足がかりとして挑戦してみるのも良いのでは。
そこで本記事ではProjectEuler(PE)入門のために、PEとは何か?何故簡単に始められるのか?どういうメリットがあるのか?おすすめのプログラミング言語は?おすすめの参考書は?という5つについて解説する。これを読んであなたもPEに参加しよう!今すぐ!

http://projecteuler.net/


PEはプログラミングと数学の問題集である
PEでは一連のプログラミングの問題が用意されている。問題数は現在も増え続けていて、この記事を書いている時点で333問の問題がある。問題は通常のプログラミングの知識で解けるものもあれば、数学の知識がないと効率的に解けないようなものもある。問題は好きな順番で解くことが出来、解いた問題数(Solved)が一定数になるとレベルがあがる。このSolvedによって自身の能力を示すことができる(このブログのプロフィールの下にあるのが私のSolved)。


PEは簡単に始められる
PEでは各問題に対して正解となる数値を入力することで正解判定が行われ、正解であればSolvedがひとつ増える。問題はいつでも閲覧でき、正解の入力タイミングも自由(不正防止のためか一定時間を置かずに連続で解答入力するとエラーになる)。従って、問題を始める時間、解くまでの時間、解くのに用いるプログラミング言語は自由に決められる。


PEのメリット
まず当然ながら問題は英語なので英語の勉強になる。といってもPEのwiki(http://odz.sakura.ne.jp/projecteuler/)で和訳が公開されているので安心。そしてPEは問題数が多く、解を計算するコードは短いものが多い。しかし計算量を工夫しなければ中々答えが出ないものもある(一応システム上何時間かかっても答えが出れば良いのだが、目安として1分で解けなければ☓らしい。このあたりは解答者の良心が問われる)。よって短い時間で効率的なコードを思いつく訓練になる(アルゴリズムと数学の力がつく)。
また上でも書いたようにSolvedによって客観的に能力を示すことができるのも大きなメリットといえる。PEは参加人数が少ないため問題のレベルが上がると解答者数がどんどん減っていく。ライバルが少ないので「この問題こんなに正解者いるの??」とはならず「全世界で数千人しか解いてない問題を解いてる!自分すごい!」というモチベーションを得ることができる(正解者数数千人でもそんなに難しくない問題も結構ある)。


PE向きのプログラミング言語
なんといってもスクリプト言語が良い。各問題は初見で解放が思いつかない場合も結構あるので、トライアンドエラーが基本。思いついた方法で直ぐにコーディングできて結果のわかるスクリプト言語が最適。候補としてはPythonRubyPerl。これらは多倍長整数型というintやlongでは扱えない大きな数値を扱える型を標準で持っている。多倍長整数型はPEでは必須なので押さえておきたい。ちなみに各言語での多倍長整数型の速度比較は(http://d.hatena.ne.jp/ku-ma-me/20080116/p1)が参考になる。


PEのための参考書
PEではアルゴリズムと数学(というか数論)の知識があると直ぐ解ける場合がある。ここではこれらの能力を伸ばす上でオススメな参考書を2冊挙げておく(私も非常にお世話になっている)。
左は通称アリ本とよばれるプログラミングコンテスト入門用の本。PEでも通用するアルゴリズムがたくさん書いてある。また数論よりのアルゴリズムも大きくページを割いて書いてあるのでオススメ。右は数論の最も分かりやすい入門書(と私は思っている)「はじめての数論」。ページ数は多いけれどものすごく丁寧に解説してあるので是非持っておきたい。

 

なおそれぞれの書籍については過去にレビューを書いているので合わせて参考に。

目指せアリ充!「プログラミングコンテスト チャレンジブック」を中級編まで読み終えた - EchizenBlog-Zwei
アリ充に近づくために「はじめての数論」を読んでる - EchizenBlog-Zwei
「はじめての数論」を読了しました - EchizenBlog-Zwei