2012年2月15日水曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の10章(章全部で復習), 10.5(練習問題の続き)拡張english_numberを解いてみる。

その他参考書籍

拡張english_number

コード(TextWrangler)

#!/usr/bin/env ruby
#encoding: utf-8

def english_number number
  return '負ではない数値を入力して下さい' if number < 0
  return 'zero' if number == 0
  
  num_string = ''
  
  ones_place = ['one', 'two', 'three',
                'four', 'five', 'six',
                'seven', 'eight', 'nine']
  tens_place = ['ten', 'twenty', 'thirty',
                'forty', 'fifty', 'sixty',
                'seventy', 'eighty', 'ninety']
  teenagers = ['eleven', 'twelve', 'thirteen',
               'fourteen', 'fifteen', 'sixteen',
               'seventeen', 'eighteen', 'nineteen']
  others = [['hundred',2],
            ['thousand',3],
            ['million',6],
            ['billion',9],
            ['trillion',12]]
  
  left = number
  while others.length > 0
    other = others.pop
    write = left / (10**other[1])
    left -= write * (10**other[1])
    
    if write > 0
      pre = english_number write
      num_string += pre + ' ' + other[0]
      if left > 0
        num_string += ' '
      end
    end
  end
  
  write = left / 10
  left -= write * 10
  
  if write > 0
    if ((write == 1) and (left > 0))
      num_string += teenagers[left - 1]
      left = 0
    else
      num_string += tens_place[write - 1]
    end
    if left > 0
      num_string += '-'
    end
  end
  
  write = left
  left = 0
  
  if write > 0
    num_string += ones_place[write - 1]
  end
  num_string
end

numbers = [0,9,10,11,17,32,88,99,100,234,3211,999999,1000000000000]
numbers.each do |number|
  puts "#{number}: #{english_number number}"
end

入出力結果(Terminal)

$ ./ruby_program.rb
0: zero
9: nine
10: ten
11: eleven
17: seventeen
32: thirty-two
88: eighty-eight
99: ninety-nine
100: one hundred
234: two hundred thirty-four
3211: three thousand two hundred eleven
999999: nine hundred ninety-nine thousand nine hundred ninety-nine
1000000000000: one trillion
$

本書を続けつつ、上記の本を入手したらそっちに切り替え。

0 コメント:

コメントを投稿