« Project Euler - Problem 38 : 0.1s (Ruby 1.9) | トップページ | Project Euler - Problem 41 »

2009年7月29日 (水)

Project Euler - Problem 39, 40

Problem 39 の問題はこちらをご覧ください。

この問題は、「Problem 9」でも使用した、"pythagorean_triples" メソッド("math_tool.rb" を参照のこと)を使えばすぐに答えが出ます。

require 'math_tool' puts (0 ... 1000).to_a.sort_by{|i| pythagorean_triples(i).size}.last

今回は "Enumerable#sort_by" というメソッドを使って見ました。結構メモリを消費するらしいのですが、コードが簡潔に書けるのは良いですね。



Problem 40 の問題はこちらをご覧ください。

今回は、数字を順に文字列に変換して、文字列全体の長さが 1000000 を越えるまで繰り替えしました。

その上で、指定された桁の数を取り出して計算しています。

数の大きさやや文字列の長さに理論上上限のない Ruby の機能があってこその解法だと思います。

str = "0" num = 1 str << num.to_s and num = num + 1 while str.size <= 100_0000 puts (0 .. 6).inject(1){|p, i| p = p * str[10 ** i].to_i}

ところで 1000000 もの長さのある文字列ってどんなのでしょうか?実際に画面に表示させるとどのくらい時間がかかるのでしょうか?

« Project Euler - Problem 38 : 0.1s (Ruby 1.9) | トップページ | Project Euler - Problem 41 »

Project Euler」カテゴリの記事

Ruby」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112020/45772543

この記事へのトラックバック一覧です: Project Euler - Problem 39, 40:

« Project Euler - Problem 38 : 0.1s (Ruby 1.9) | トップページ | Project Euler - Problem 41 »

2016年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
フォト

最近のトラックバック

無料ブログはココログ