2012年10月14日日曜日

開発環境

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

その他参考書籍

拡張 english_number

コード(TextWrangler)

sample.rb

#!/usr/bin/env ruby1.9
#-*- coding: utf-8 -*-

def english_number number
  return '0以上の数値を入力してください。' if number < 0
  return 'zero' if number == 0
  result = ''
  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
      hundreds = english_number write
      result = result + hundreds + ' ' + other[0]
      if left > 0
        result += ' '
      end
    end
  end
  write = left / 10
  left = left - write * 10
  if write > 0
    if ((write == 1) and (left > 0))
      result += teenagers[left - 1]
      left = 0
    else
      result += tens_place[write - 1]
    end
    result += '-' if left > 0
  end
  write = left
  left = 0
  result += ones_place[write - 1] if write > 0
  result
end

(999900..1000000).each do |number|
  puts "#{number}: #{english_number number}"
end

入出力結果(Terminal)

$ ./sample.rb
999900: nine hundred ninety-nine thousand nine hundred
999901: nine hundred ninety-nine thousand nine hundred one
999902: nine hundred ninety-nine thousand nine hundred two
999903: nine hundred ninety-nine thousand nine hundred three
999904: nine hundred ninety-nine thousand nine hundred four
999905: nine hundred ninety-nine thousand nine hundred five
999906: nine hundred ninety-nine thousand nine hundred six
999907: nine hundred ninety-nine thousand nine hundred seven
999908: nine hundred ninety-nine thousand nine hundred eight
999909: nine hundred ninety-nine thousand nine hundred nine
999910: nine hundred ninety-nine thousand nine hundred ten
999911: nine hundred ninety-nine thousand nine hundred eleven
999912: nine hundred ninety-nine thousand nine hundred twelve
999913: nine hundred ninety-nine thousand nine hundred thirteen
999914: nine hundred ninety-nine thousand nine hundred fourteen
999915: nine hundred ninety-nine thousand nine hundred fifteen
999916: nine hundred ninety-nine thousand nine hundred sixteen
999917: nine hundred ninety-nine thousand nine hundred seventeen
999918: nine hundred ninety-nine thousand nine hundred eighteen
999919: nine hundred ninety-nine thousand nine hundred nineteen
999920: nine hundred ninety-nine thousand nine hundred twenty
999921: nine hundred ninety-nine thousand nine hundred twenty-one
999922: nine hundred ninety-nine thousand nine hundred twenty-two
999923: nine hundred ninety-nine thousand nine hundred twenty-three
999924: nine hundred ninety-nine thousand nine hundred twenty-four
999925: nine hundred ninety-nine thousand nine hundred twenty-five
999926: nine hundred ninety-nine thousand nine hundred twenty-six
999927: nine hundred ninety-nine thousand nine hundred twenty-seven
999928: nine hundred ninety-nine thousand nine hundred twenty-eight
999929: nine hundred ninety-nine thousand nine hundred twenty-nine
999930: nine hundred ninety-nine thousand nine hundred thirty
999931: nine hundred ninety-nine thousand nine hundred thirty-one
999932: nine hundred ninety-nine thousand nine hundred thirty-two
999933: nine hundred ninety-nine thousand nine hundred thirty-three
999934: nine hundred ninety-nine thousand nine hundred thirty-four
999935: nine hundred ninety-nine thousand nine hundred thirty-five
999936: nine hundred ninety-nine thousand nine hundred thirty-six
999937: nine hundred ninety-nine thousand nine hundred thirty-seven
999938: nine hundred ninety-nine thousand nine hundred thirty-eight
999939: nine hundred ninety-nine thousand nine hundred thirty-nine
999940: nine hundred ninety-nine thousand nine hundred forty
999941: nine hundred ninety-nine thousand nine hundred forty-one
999942: nine hundred ninety-nine thousand nine hundred forty-two
999943: nine hundred ninety-nine thousand nine hundred forty-three
999944: nine hundred ninety-nine thousand nine hundred forty-four
999945: nine hundred ninety-nine thousand nine hundred forty-five
999946: nine hundred ninety-nine thousand nine hundred forty-six
999947: nine hundred ninety-nine thousand nine hundred forty-seven
999948: nine hundred ninety-nine thousand nine hundred forty-eight
999949: nine hundred ninety-nine thousand nine hundred forty-nine
999950: nine hundred ninety-nine thousand nine hundred fifty
999951: nine hundred ninety-nine thousand nine hundred fifty-one
999952: nine hundred ninety-nine thousand nine hundred fifty-two
999953: nine hundred ninety-nine thousand nine hundred fifty-three
999954: nine hundred ninety-nine thousand nine hundred fifty-four
999955: nine hundred ninety-nine thousand nine hundred fifty-five
999956: nine hundred ninety-nine thousand nine hundred fifty-six
999957: nine hundred ninety-nine thousand nine hundred fifty-seven
999958: nine hundred ninety-nine thousand nine hundred fifty-eight
999959: nine hundred ninety-nine thousand nine hundred fifty-nine
999960: nine hundred ninety-nine thousand nine hundred sixty
999961: nine hundred ninety-nine thousand nine hundred sixty-one
999962: nine hundred ninety-nine thousand nine hundred sixty-two
999963: nine hundred ninety-nine thousand nine hundred sixty-three
999964: nine hundred ninety-nine thousand nine hundred sixty-four
999965: nine hundred ninety-nine thousand nine hundred sixty-five
999966: nine hundred ninety-nine thousand nine hundred sixty-six
999967: nine hundred ninety-nine thousand nine hundred sixty-seven
999968: nine hundred ninety-nine thousand nine hundred sixty-eight
999969: nine hundred ninety-nine thousand nine hundred sixty-nine
999970: nine hundred ninety-nine thousand nine hundred seventy
999971: nine hundred ninety-nine thousand nine hundred seventy-one
999972: nine hundred ninety-nine thousand nine hundred seventy-two
999973: nine hundred ninety-nine thousand nine hundred seventy-three
999974: nine hundred ninety-nine thousand nine hundred seventy-four
999975: nine hundred ninety-nine thousand nine hundred seventy-five
999976: nine hundred ninety-nine thousand nine hundred seventy-six
999977: nine hundred ninety-nine thousand nine hundred seventy-seven
999978: nine hundred ninety-nine thousand nine hundred seventy-eight
999979: nine hundred ninety-nine thousand nine hundred seventy-nine
999980: nine hundred ninety-nine thousand nine hundred eighty
999981: nine hundred ninety-nine thousand nine hundred eighty-one
999982: nine hundred ninety-nine thousand nine hundred eighty-two
999983: nine hundred ninety-nine thousand nine hundred eighty-three
999984: nine hundred ninety-nine thousand nine hundred eighty-four
999985: nine hundred ninety-nine thousand nine hundred eighty-five
999986: nine hundred ninety-nine thousand nine hundred eighty-six
999987: nine hundred ninety-nine thousand nine hundred eighty-seven
999988: nine hundred ninety-nine thousand nine hundred eighty-eight
999989: nine hundred ninety-nine thousand nine hundred eighty-nine
999990: nine hundred ninety-nine thousand nine hundred ninety
999991: nine hundred ninety-nine thousand nine hundred ninety-one
999992: nine hundred ninety-nine thousand nine hundred ninety-two
999993: nine hundred ninety-nine thousand nine hundred ninety-three
999994: nine hundred ninety-nine thousand nine hundred ninety-four
999995: nine hundred ninety-nine thousand nine hundred ninety-five
999996: nine hundred ninety-nine thousand nine hundred ninety-six
999997: nine hundred ninety-nine thousand nine hundred ninety-seven
999998: nine hundred ninety-nine thousand nine hundred ninety-eight
999999: nine hundred ninety-nine thousand nine hundred ninety-nine
1000000: one million
$

0 コメント:

コメントを投稿