2013年10月17日木曜日

開発環境

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

その他参考書籍

拡張 english_number

コード(BBEdit)

sample.rb

#!/usr/bin/env ruby2.0
#-*- coding: utf-8 -*-

def english_number number
    return '負ではない数値を入力してください' if number < 0
    return 'zero' if number == 0
    
    num_string = ''
    ones_place = %w[one two three four five
                    six seven eight nine]
    tens_place = %w[ten twenty thirty forty fifty
                    sixty seventy eighty ninety]
    teenagers = %w[eleven twelve thirteen fourteen fifteen
                   sixteen seventeen eighteen nineteen]
    others = [
        [2, 'hundred'],
        [3, 'thousand'],
        [6, 'million'],
        [9, 'billion'],
        [12, 'trillion'],
        [15, 'quandrillion'],
        [18, 'quintillion'],
        [21, 'sextillion'],
        [24, 'septillion']]
    
    left = number
    
    while others.length > 0
        other = others.pop
        n = other[0]
        name = other[1]
        d = 10 ** n
        write = left / d
        left -= write * d
        if write > 0
            pre = english_number write
            num_string = num_string +  pre + ' ' + name
            num_string += ' ' if left > 0
        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
    
    num_string += ones_place[write - 1] if write > 0
    
    num_string
end

n = 1234567890123456789012345
puts n
puts english_number n

入出力結果(Terminal)

$ ./sample.rb
1234567890123456789012345
one septillion two hundred thirty-four sextillion five hundred sixty-seven quintillion eight hundred ninety quandrillion one hundred twenty-three trillion four hundred fifty-six billion seven hundred eighty-nine million twelve thousand three hundred forty-five
$

ちなみにpython3.4の場合。

コード(BBEdit)

sample.py

#!/usr/bin/env python
#-*- coding: utf-8 -*-

def englishNumber(num):
    if num < 0:
        return "負でない数値を入力してください"
    if num == 0:
        return 'zero'
    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 = [
        [2, 'hundred'],
        [3, 'thousand'],
        [6, 'million'],
        [9, 'billion'],
        [12, 'trillion'],
        [15, 'quandrillion'],
        [18, 'quintillion'],
        [21, 'sextillion'],
        [24, 'septillion']]
    
    left = num
    
    while len(others) > 0:
        other = others.pop()
        n = other[0]
        name = other[1]
        d = 10 ** n
        write = left // d
        left -= write * d
        if write > 0:
            pre = englishNumber(write)
            num_string = num_string + pre + ' ' + name
            if left > 0:
                num_string += ' '
    
    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]
        
        if left > 0:
            num_string += ' '
    
    write = left
    left = 0
    
    if write > 0:
        num_string += ones_place[write - 1]
    
    return num_string

n = 1234567890123456789012345
print(n)
print(englishNumber(n))

入出力結果(Terminal)

$ ./sample.py
1234567890123456789012345
one septillion two hundred thirty four sextillion five hundred sixty seven quintillion eight hundred ninety quandrillion one hundred twenty three trillion four hundred fifty six billion seven hundred eighty nine million twelve thousand three hundred forty five
$

0 コメント:

コメントを投稿