ProjectEulerがおもしろい。

In: Project Euler

11 11月 2009

一時期ハマっていたProject Euler。

以前はRubyで参戦していたのですが、Clojureでおさらいしてみることにしました。

Project Eulerとは

数学の問題をプログラミング言語で解き、正解数を競うサイト。
問題を解くためにはプログラミング能力と数学的素養が求められる。

はてなキーワード より引用

2009/11/11現在で問題が263問あり、毎週1問追加されていきます。

答えは設問のページにて数字で入力するのですが、正解するためには:

  1. 問題の意味が解る
  2. 解き方が判る
  3. コーディングできる
  4. コードが実用的な速度で実行できる

をクリアしていなければならず、とくに(4)でけっこうハマります。

“one-minute rule”というのがあり 計算に1分を越えるようなアルゴリズムでは失格とのこと。

Ruby1.8系で素数計算などをやるとかなりキビシイ制限です。

かといって単純に速い言語が有利とかいう話でもなくて、設問の多くは計算量のオーダーがもろに影響するようになってます。

参考: 多項式時間 – Wikipedia , ランダウの記号 – Wikipedia

ちょっとしたヒラメキで 100年くらいかかりそうな計算量が100ミリ秒で可能になったりします。(実際にある問題にて経験しました)

また、扱う数が大きくなってくると「メモリ量の限界」や「整数として扱える限界」を超えてくる場合もあるのでアルゴリズムに工夫が必要になります。

ちなみに初期の頃の設問はパラメータがたまに変更されます。
計算機の性能があがってきたのに合わせて計算量を増やしているのだと思います。

さまざまなレベルの問題があるので「そのときの自分のレベルで解ける問題がたいてい存在する」という楽しみがあります。
まさに初級者から上級者まで。

恥ずかしながら 僕の戦績 を公開。
途中で飽きてきたのと図形問題が好きなのでつまみ食いしてた結果。

統計のページ をみるとClojure人口まだまだ少ないな。まあClojureを使うくらいならLisp使うのか。
数学問題だけあってMLやHaskellで解いてる人が多いですね。

いままではRubyで参戦していたのですがこれからはClojureでいきます。

そういえばプロフィールの言語選択には「Pencil/Paper」という項目がありました(笑) まあ中には紙の上で答えが計算できるものもありましたけども。

Project Euler おもしろいですよ。プログラマの方は息抜きに参加してみてはいかがでしょうか。

blog comments powered by Disqus
Get Adobe Flash playerPlugin by wpburn.com wordpress themes

About this blog

私 manjilab のポータル的サイトになっております。日々気付いたこと、考えたこと、発表したいものを載せていきます。

Photostream

    Lisp indent 考察Lisp indent 考察Lisp indent 考察Lisp indent 考察Lisp indent 考察Tips to use Clojure(Lisp) with TextMateTips to use Clojure(Lisp) with TextMateTips to use Clojure(Lisp) with TextMate