Rubyチュートリアル 3日目
あけましておめでとうございます。
年末年始は忙しくてまったくできなかったけど、やっと落ち着いたのでチュートリアルをぼちぼち進めてます。
プログラミング入門 - Rubyを使って - (原文:Learn to Program)
『8.メソッドの作り方 』 englishNumber
たとえば22のようなひとつの数をもらって、その英語読みの文字列(この場合'twenty-two'のような)を返します。
中略
- 上のenglishNumberを拡張してみましょう。最初にthousand(千の桁)を導入してください。上のプログラムでは 'ten hundred'となっているところを'one thousand'を返すように、あるいは、'one hundred hundred'の代わりに'ten thousand'を返すようにします。
- englishNumberにさらに改良を加えましょう。 milion(百万)を加えます。その結果、'one thousand thousand'の代わりに 'one million'が得られるようにします。その後、billion(十億)とかtrillion(兆)とかを追加していってみましょう。どこまでいけるでしょうか?
#! /usr/local/bin/ruby def englishNumber number if number < 0 return '負でない数を入力してください.' end if number == 0 return 'zero' end numString = '' onesPlace = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] tensPlace = ['ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'] teenagers = ['eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'] left = number write = left/1000000000 left = left - write*1000000000 if write > 0 billions = englishNumber write numString << billions + ' billion' if left > 0 numString << ' ' end end write = left/1000000 left = left - write*1000000 if write > 0 millions = englishNumber write numString << millions + ' million' if left > 0 numString << ' ' end end write = left/1000 left = left - write*1000 if write > 0 thousands = englishNumber write numString << thousands + ' thousand' if left > 0 numString << ' ' end end write = left/100 left = left - write*100 if write > 0 hundreds = englishNumber write numString << hundreds + ' hundred' if left > 0 numString << ' ' end end write = left/10 left = left - write*10 if write > 0 if ((write == 1) && (left > 0)) numString << teenagers[left-1] left = 0 else numString << tensPlace[write-1] end if left > 0 numString << '-' end end write = left left = 0 if write > 0 numString << onesPlace[write-1] end numString end
おまけ
漢数字で表示するプログラム
#!ruby -Ks def japaneseNumber number if number < 0 return '正の数を入力してください.' end if number == 0 return 'zero' end numString = '' ones = ['一', '二', '三', '四', '五', '六', '七', '八', '九'] tens = ['十', '二十', '三十', '四十', '五十', '六十', '七十', '八十', '九十'] left = number write = left/100 left = left - write*100 if write > 0 if write == 1 numString << '百' else hundreds = japaneseNumber write numString << hundreds + '百' end end write = left/10 left = left - write*10 if write > 0 numString << tens[write-1] end write = left left = 0 if write > 0 numString << ones[write-1] end numString end
#!ruby -Ks にしないと文字化けしてしまう。