« Project Euler - Problem 14 | トップページ | Project Euler - Problem 18 »

2009年6月24日 (水)

Project Euler - Problem 15, 16, 17

Problem 15

この問題は、組み合わせの問題ですね。

require 'math_tool' puts 40.combination_size(20)

Problem 16

Ruby の整数は桁数に制限がないので、この問題は普通に計算するだけですね。

require 'math_tool' puts (2 ** 1000).to_a.inject(:+)

Problem 17

数字を英単語にしたときの文字数だけを数え上げるメソッドを作ってもよかったのですが、「それじゃ面白くない」ので 100 以下の数字の英単語を返すメソッドを作ってみました。

class Integer @@w1_9 = {1 => "one", 2 => "two", 3 => "three", 4 => "four", 5 => "five", 6 => "six", 7 => "seven", 8 => "eight", 9 => "nine"} @@w10_19 = {10 => "ten", 11 => "eleven", 12 => "twelve", 13 => "thirteen", 14 => "fourteen", 15 => "fifteen", 16 => "sixteen", 17 => "seventeen", 18 => "eighteen", 19 => "nineteen"} @@w20_90 = {20 => "twenty", 30 => "thirty", 40 => "forty", 50 => "fifty", 60 => "sixty", 70 => "seventy", 80 => "eighty", 90 => "ninety"} def to_words upper, lower = self.divmod(100) case when upper == 10 upper_words = "one thousand" when upper > 0 upper_words = @@w1_9[upper] + " hundred" else upper_words = "" end case when lower == 0 lower_words = "" when lower < 10 lower_words = @@w1_9[lower] when lower < 20 lower_words = @@w10_19[lower] else r = lower.modulo(10) lower_words = @@w20_90[lower - r] lower_words = lower_words + "-" + @@w1_9[r] if r > 0 end if upper_words.empty? or lower_words.empty? then ans = upper_words + lower_words else ans = upper_words + " and " + lower_words end return ans end end ans = 0 1.upto(1000) do |i| ans = ans + i.to_words.delete(" ").delete("-").size end puts ans

« Project Euler - Problem 14 | トップページ | Project Euler - Problem 18 »

Project Euler」カテゴリの記事

Ruby」カテゴリの記事

コメント

コメントを書く

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

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

トラックバック

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

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

« Project Euler - Problem 14 | トップページ | Project Euler - Problem 18 »

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            
フォト

最近のトラックバック

無料ブログはココログ