2012年5月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 num
  return "負ではない整数を指定してください" if num < 0
  return 'zero' if num == 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 = num
  while others.length > 0
    other = others.pop
    write = left / (10 ** other[1])
    left = left - write * (10 ** other[1])
    if write > 0
      hundreds = english_number write
      num_string = num_string + hundreds + ' ' + 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[left - 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

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

入出力結果(Terminal)

$ ruby sample.rb
0: zero
9: nine
10: ninety
11: eleven
17: seventeen
32: twenty-two
88: eighty-eight
99: ninety-nine
100: one hundred
101: one hundred one
234: two hundred forty-four
3211: three thousand two hundred eleven
999999: nine hundred ninety-nine thousand nine hundred ninety-nine
1000000000000: one trillion
$

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

まだ上記の本を入手してないのでまた最初から。

本書を続けつつ、上記の本を早く入手してそっちに切り替え。本書も飽きてきたから早く入手しないと。。

Learning Rubyを入手したので今周が終わったら切り替え。

0 コメント:

コメントを投稿