2012年3月18日日曜日

開発環境

『初めてのプログラミング 第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 = left - write * (10 ** other[1])
    if write > 0
      pre = english_number write
      num_string = num_string + pre + ' ' + other[0]
      if left > 0
        num_string += ' '
      end
    end
  end
  
  write = left / 10
  left = 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

[-10,0,9,10,11,17,32,88,99,100,101,234,3211,999999999999,1000000000000,999999999999999].each do |num|
  puts "#{num}: #{english_number num}"
end

入出力結果(Terminal)

$ ./ruby_program.rb
-10: 負ではない数値を入力してください。
0: zero
9: nine
10: ten
11: eleven
17: seventeen
32: thirty-two
88: eighty-eight
99: ninety-nine
100: one hundred
101: one hundred one
234: two hundred thirty-four
3211: three thousand two hundred eleven
999999999999: nine hundred ninety-nine billion nine hundred ninety-nine million nine hundred ninety-nine thousand nine hundred ninety-nine
1000000000000: one trillion
999999999999999: nine hundred ninety-nine trillion nine hundred ninety-nine billion nine hundred ninety-nine million nine hundred ninety-nine thousand nine hundred ninety-nine
$

今回の周ではirb(インタラクティブRuby)も少しずつ活用してみることに。

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

0 コメント:

コメントを投稿