2013年11月16日土曜日

mapcar と計算で突破する Project Euler

Lisp の勉強にと思ってはじめた ProjectEulerが面白すぎる

有名な「プログラミング問題サイト」は、多くがLispに対応していない。
  • ×:PKU Judge System -> C, C++, Java だっけ
  • ×:AOJ Judge System -> C, C++, Java,, だっけ???
  • ×:Top Coder -> Java, C++, C# は知っている
  • ○:shinichiro_h さんのゴルフ場 -> 言語のたまり場状態
  • ×:Code Golf 本家 -> たしかダメ, Perl, Python, Ruby だっけ?
有名、は有名だろう、考えてみたら自分があんまりサイトを知らないだけのような気がしてきたがまあいいや

ProjectEuler の特殊で面白い点は
  • 目的は「結果」であって「過程」は各回答者の自由
    • 公式にも「WEB探して答えを見つけちゃうこともあるだろうけど、
      でも、あなたはそれでいいの?」と書いてある。
      スタンスがわかる文書である。
  • 問題がよく作りこまれている
    • 主観ではあるが。
  • 回答は「答えの数字」であって「プログラム」でも「実行結果」でもない
  • 正答者のみが閲覧可能な回答スレッドでは、コードの公開がされているが
    簡単な問題でも思いもよらない方法があったり、もっときれいなコードにあったりと
    勉強になる
    • 答えだけならいくつかぐぐれば見つかることは確認済みだけれども。
一口に言って、プログラミング自体を勉強したいなら、圧倒的にTopCoderが選択肢ではある。本番環境だし、言語も今はやっているものだし。競争相手も多いし、問題も良く練られていると聞いているし、なにより「Challange」システムがコードの向上につながるだろうし。
けれど「解けるとわかっているものをあの手この手で解く行為」を楽しめるという点にはまった。自分にはわからないけど、確かに解ける方法がある、でもわからない!わくわく感がある。

問題はすべて英語なので、その点ハードルは高いかもしれないが、、、有志の日本語訳ページもあるので、どうしてもという場合はどうぞ。あと、エキサイト翻訳やGoogle翻訳でも多くの問題は大丈夫と思うぞ。一番問題なのは、翻訳ではなくて問題自体の難しさだし。

ああ、面白い。

最後に、雑感。
  • 多く使われている(使っていると主張されている)言語が統計で見られる
    • Mathematicaは知っていたが、PARI/GP , Sage, APL/J/K、、現代はすごいな!
    • Spread Sheet  vs Pencil/Peper :回答力では SpreadSheetが勝る様子
    • Lisp !!!
  • 今のところ「使った」アイデアは
    • バックトラック
    • どうしても解けなくて遺伝的アルゴリズム => でも解けない orz
  • 言語の導入にも面白そうだ
    • 簡単な問題であれば「答えさえわかればよい」ので。
      簡単な計算がプログラミングできますか?ということ。
      これがやってみると難しいものです。
    • ただし、多倍長整数への親和性はなるたけほしいかも。
      • その点Lispは「組み込みで対応」なのが壁の低さにつながった
      • C/C++だとライブラリないし自作必須だからなあ、、、。

0 件のコメント:

コメントを投稿