2006-07-11
■ [たのしいRuby]12_1漢数字を数字に変換するメソッド

最初に
ひさしぶりに挑戦
問題
"七千百二十三"といった、漢数字による数の表現を、「7123」のような数値に変換するメソッドkan2numを定義してください
解答
require 'test/unit' class Kan2NumTest < Test::Unit::TestCase def setup @arg = %w|十五 百二十三 千五百四十六 百五十六万八千八百四十一 千二百三十五億六千八百七十三万千七百八十三| @result = [15, 123, 1546, 1568841, 123568731783] end def test_kan2num while arg = @arg.shift assert_equal kan2num(arg), @result.shift end end end def kan2num kan nums = %w|〇 一 二 三 四 五 六 七 八 九| digits = %w|十 百 千| digits2 = %w|万 億 兆| pieces = kan.split(//e) stack = 0 sum = 0 result = 0 while kan = pieces.shift if i = nums.index(kan) stack = i elsif i = digits.index(kan) stack = 1 if stack == 0 sum += stack * (10 ** (i + 1)) stack = 0 elsif i = digits2.index(kan) result += (sum + stack) * ( 10 ** ((i + 1) * 4)) sum = 0 stack = 0 end end result += sum + stack end
実行結果
Loaded suite 12-1 Started . Finished in 0.003151 seconds. 1 tests, 5 assertions, 0 failures, 0 errors
コメント
結構時間かかった。
多分カナリキタナイ…
なんだよstack,sum,resultって…
digit,digit2ひでぇwwww
0から9の数字と
十,百,千と
それ以上の桁を分けるって考えをすぐに思いついたんだけど…
実装はショボーン。
ってか他のアプローチの方が素直にいけたりするのかもしれないなぁ…思いつかないけど。
今日はもう疲れたので今度にしますが、他の人の回答も絶対読もう。
コメントを書く
トラックバック - http://rubyist.g.hatena.ne.jp/sin5/20060711