# -*- coding: utf-8 -*- # http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2017 # # なにも考えずに.. S1 = %w(. one two three four five six seven eight nine) S10 = %w(ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen) S99 = %w(. . twenty thirty forty fifty sixty seventy eighty ninety) def num_english(n) if (n < 10) S1[n] elsif (n < 20) S10[n % 10] elsif (n < 100) if (n % 10 == 0) S99[n / 10] else S99[n / 10] + '-' + num_english(n % 10) end elsif (n < 1000) if (n % 100 == 0) num_english(n / 100) + ' hundred' else S1[n / 100] + ' hundred and ' + num_english(n % 100) end elsif (n == 1000) "one thousand" end end puts (1 .. 1000).reduce(0) {|sum, i|sum + num_english(i).gsub(/[\s-]+/,'').size }