Project Eulerの進め方

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


Project Eulerを紹介する記事が上がっていたので、退役軍人(?)の私からも少しアドバイスなんぞを。

Project Eulerの問題は基本的には1問目から順に解きましょう。最初の方は簡単すぎると思われるかもしれませんが、これらは関数型のプログラミングスタイルに導くための問題なのでしょう。そのうち難しくなっていきます。解くだけなら簡単な問題もあります。しかし、それらにも実は深い意味があることが多いです。別解を考えてみましょう。よりうまく解けることもあります。

たまには先の問題を解いてみるのもよいと思います。最近の問題は基本的にHard→Middle→Easyの難易度で順に出題されるので(Problem 333はEasy)、易しい問題もあります。解いた人数が多い問題を選びましょう。200人を切るような問題はちょっとやそっとでは解けません。そうして選んだ問題が解けなくてもかまいません。解けなかったらおとなしく順番に解いていた問題に戻りましょう。解いていくと自然と実力がついてくるので、そのうちまた以前解けなかった問題にチャレンジしてみましょう。解けるようになっているかもしれません。

数論についてはそんなに知らなくても問題ないです。友愛数とか過剰数とかコラッツとか自然に数論に強くなるように問題が選ばれています。ただ、ペル方程式についてはどうなんでしょうね。あるところからペル方程式に帰着する問題が大量に現れます。私はペル方程式の解き方は知らなかったものの名前はすぐに思い出したので検索で解けました。しかし、ペル方程式の名前も知らない人はどうするんでしょうね。

英語は自力で読みましょう。Project Eulerは解けた問題数を競うものでしたが、不正の問題などもあり現在は問題を解く速さを競うレースになっています。速く英語を理解することも重要なこともあるので、そのときのために読んでおきましょう。ただし、英語だけを読んでいてもわからない問題もあるので、どうしても解けないときは和訳を読みましょう。

細かいところで、Project Eulerの問題は基本的に64ビット整数の範囲で答えが出せるはずです。そうでない問題は多倍長整数を作れって問題だと思ってます。Pythonのようなふつう32ビットを超えると多倍長整数となってしまう言語は速度的にかなり不利になります。

あと、1分ルールはそんなに深刻に考えなくてもよいです。最速で1分を切るアルゴリズムもあるということだという意味にとらえましょう。


ざっと書きなぐってみました。とにかくこの問題群を解いていけばプログラミングと数論に強くなることは間違いないので、がんばって解いてみてください。