開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの機能制限無料版、light版)
- Script言語:Ruby
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 10章(章全部で復習), 10.5(練習問題の続き)拡張 english_number を解いてみる。
その他参考書籍
- 『プログラミング言語 Ruby』David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-394-4)
- Rubyクックブック ―エキスパートのための応用レシピ集
拡張 english_number
コード(TextWrangler)
sample.rb
#!/usr/bin/env ruby1.9
# -*- coding: utf-8 -*-
def english_number number
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']]
left = number
while others.length > 0
other = others.pop
write = left / (10 ** other[0])
left -= write * (10 ** other[0])
if write > 0
pre = english_number write
num_string = num_string + pre + ' ' + other[1]
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
num_string += '-' if left > 0
end
write = left
left = 0
num_string += ones_place[write - 1] if write > 0
num_string
end
(1..100).each do |number|
puts "#{number}: #{english_number number}"
end
num = 1111111111111
puts "#{num}: #{english_number num}"
入出力結果(Terminal)
$ ./sample.rb 1: one 2: two 3: three 4: four 5: five 6: six 7: seven 8: eight 9: nine 10: ten 11: eleven 12: twelve 13: thirteen 14: fourteen 15: fifteen 16: sixteen 17: seventeen 18: eighteen 19: nineteen 20: twenty 21: twenty-one 22: twenty-two 23: twenty-three 24: twenty-four 25: twenty-five 26: twenty-six 27: twenty-seven 28: twenty-eight 29: twenty-nine 30: thirty 31: thirty-one 32: thirty-two 33: thirty-three 34: thirty-four 35: thirty-five 36: thirty-six 37: thirty-seven 38: thirty-eight 39: thirty-nine 40: forty 41: forty-one 42: forty-two 43: forty-three 44: forty-four 45: forty-five 46: forty-six 47: forty-seven 48: forty-eight 49: forty-nine 50: fifty 51: fifty-one 52: fifty-two 53: fifty-three 54: fifty-four 55: fifty-five 56: fifty-six 57: fifty-seven 58: fifty-eight 59: fifty-nine 60: sixty 61: sixty-one 62: sixty-two 63: sixty-three 64: sixty-four 65: sixty-five 66: sixty-six 67: sixty-seven 68: sixty-eight 69: sixty-nine 70: seventy 71: seventy-one 72: seventy-two 73: seventy-three 74: seventy-four 75: seventy-five 76: seventy-six 77: seventy-seven 78: seventy-eight 79: seventy-nine 80: eighty 81: eighty-one 82: eighty-two 83: eighty-three 84: eighty-four 85: eighty-five 86: eighty-six 87: eighty-seven 88: eighty-eight 89: eighty-nine 90: ninety 91: ninety-one 92: ninety-two 93: ninety-three 94: ninety-four 95: ninety-five 96: ninety-six 97: ninety-seven 98: ninety-eight 99: ninety-nine 100: one hundred 1111111111111: one trillion one hundred eleven billion one hundred eleven million one hundred eleven thousand one hundred eleven $
ちなみにJavaScriptの場合。
コード(TextWrangler)
var others;
function english_number(number){
var num_string = "";
var ones_place = ['one', 'two', 'three',
'four', 'five', 'six',
'seven', 'eight', 'nine'];
var tens_place = ['ten', 'twenty', 'thirty',
'forty', 'fifty', 'sixty',
'seventy', 'eighty', 'ninety'];
var teenagers = ['eleven', 'twelve', 'thirteen',
'fourteen', 'fifteen', 'sixteen',
'seventeen', 'eighteen', 'nineteen'];
var others = [[2, 'hundred'],
[3, 'thousand'],
[6, 'million'],
[9, 'billion'],
[12, 'trillion']];
var left = number;
while(others.length > 0){
var other = others.pop();
var write = Math.floor(left / Math.pow(10, other[0]));
left = left - write * Math.pow(10, other[0]);
if(write > 0){
var pre = english_number(write);
num_string = num_string + pre + ' ' + other[1];
if(left > 0){
num_string += ' ';
}
}
}
write = Math.floor(left / 10);
left = left - write * 10;
if(write > 0){
if((write == 1) && (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;
}
var number = parseInt($('#t0').val());
var result = english_number(number);
$('#pre0').text(result);
pythonの場合。
sample.py
コード(TextWrangler)
#!//usr//bin//env python3.3
#-*- coding: utf-8 -*-
def english_number(number):
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']]
left = number
while others:
other = others.pop()
write = left // (10 ** other[0])
left -= write * (10 ** other[0])
if write > 0:
pre = english_number(write)
num_string = num_string + pre + ' ' + other[1]
if left > 0:
num_string += ' '
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]
if left > 0: num_string += '-'
write = left
left = 0
if write > 0: num_string += ones_place[write - 1]
return num_string
for number in range(1,101):
print("{0}: {1}".format(number, english_number(number)))
num = 123456789
print("{0}: {1}".format(num, english_number(num)))
入出力結果(Terminal)
$ ./sample.py 1: one 2: two 3: three 4: four 5: five 6: six 7: seven 8: eight 9: nine 10: ten 11: eleven 12: twelve 13: thirteen 14: fourteen 15: fifteen 16: sixteen 17: seventeen 18: eighteen 19: nineteen 20: twenty 21: twenty-one 22: twenty-two 23: twenty-three 24: twenty-four 25: twenty-five 26: twenty-six 27: twenty-seven 28: twenty-eight 29: twenty-nine 30: thirty 31: thirty-one 32: thirty-two 33: thirty-three 34: thirty-four 35: thirty-five 36: thirty-six 37: thirty-seven 38: thirty-eight 39: thirty-nine 40: forty 41: forty-one 42: forty-two 43: forty-three 44: forty-four 45: forty-five 46: forty-six 47: forty-seven 48: forty-eight 49: forty-nine 50: fifty 51: fifty-one 52: fifty-two 53: fifty-three 54: fifty-four 55: fifty-five 56: fifty-six 57: fifty-seven 58: fifty-eight 59: fifty-nine 60: sixty 61: sixty-one 62: sixty-two 63: sixty-three 64: sixty-four 65: sixty-five 66: sixty-six 67: sixty-seven 68: sixty-eight 69: sixty-nine 70: seventy 71: seventy-one 72: seventy-two 73: seventy-three 74: seventy-four 75: seventy-five 76: seventy-six 77: seventy-seven 78: seventy-eight 79: seventy-nine 80: eighty 81: eighty-one 82: eighty-two 83: eighty-three 84: eighty-four 85: eighty-five 86: eighty-six 87: eighty-seven 88: eighty-eight 89: eighty-nine 90: ninety 91: ninety-one 92: ninety-two 93: ninety-three 94: ninety-four 95: ninety-five 96: ninety-six 97: ninety-seven 98: ninety-eight 99: ninety-nine 100: one hundred 123456789: one hundred twenty-three million four hundred fifty-six thousand seven hundred eighty-nine $
0 コメント:
コメントを投稿