あー,自分で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