あー,自分でWebサーバ持っていないし,GAEにアプリ登録したこともないから,この問題にはチャレンジできないなと思っていましたが,回答締切6時間前に,別に自分で簡易ウェブサーバ立ちあげればいいんじゃないと思い,急遽やってみました。
幸いなことに,EmacsをChrome上で利用するためにWEBrickを利用したHTTPサーバのスクリプトを読んだこと(ChromeとEmacsを愛するもの達へ 【編集あり】)を思いだしたのが幸いでした。
方針は,
- 特殊ケース 0 の場合は 零(H) を返す
- 兆の位の4桁,億の位の4桁,万の位の4桁,一の位?の4桁を抽出して,漢数字に変換する。0や1千の扱い時に注意する。
def trans_4digit_kansuzi(num)
digit_1st_array = ['', 'G', 'B', 'S', 'A', 'Q', 'Z', 'P', 'C', 'Y'] # 零 一 二 三 四 五 六 七 八 九
digit_other_array = ['', '', 'B', 'S', 'A', 'Q', 'Z', 'P', 'C', 'Y'] # 零 一 二 三 四 五 六 七 八 九
unit_array = ['N', 'M', 'J', ''] # 千 百 十 零
is_top_digit_zero = true
ret_str = ""
for i in 0 .. unit_array.size - 1
tmp_num = (num % (10 ** (unit_array.size - i))) / (10 ** (unit_array.size - 1 -i))
if tmp_num > 0 || is_top_digit_zero == false
is_top_digit_zero = false
if tmp_num != 0
if i == (unit_array.size - 1)
ret_str += (digit_1st_array[tmp_num] + unit_array[i])
else
ret_str += (digit_other_array[tmp_num] + unit_array[i])
end
end
end
end
return ret_str
end
def trans_kansuzi(num)
if num == 0
return 'H' # 零
end
unit_array = ['T', 'D', 'K', ''] # 兆 億 万 零
ret_str = ""
is_top_digit_zero = true
for i in 0 .. unit_array.size - 1
tmp_num = (num % (10000 ** (unit_array.size - i))) / (10000 ** (unit_array.size - 1 - i))
debug_str = i.to_s + " " + tmp_num.to_s
p debug_str
if tmp_num > 0 || is_top_digit_zero == false
is_top_digit_zero = false
if tmp_num != 0
ret_str += (trans_4digit_kansuzi(tmp_num) + unit_array[i])
end
end
end
return ret_str
end
p trans_kansuzi(ARGV[0].to_i)
本当は
tmp_num = (num % (10000 ** (unit_array.size - i))) / (10000 ** (unit_array.size - 1 - i))のように上位桁から検証してしまったが,
tmp_num = num % 10000 # 下4桁の値を得る # tmp_num 文字列生成処理 num = num / (10000 ** i) # 右4桁移動する。のように,下位桁から検証した方が綺麗。(テストはしていない)
No comments:
Post a Comment