DevFestクイズ答案: 漢字変換マシン
なんかもうすっかり時期を逸した感じですが、せっかくなので、ほぼas-isで答案晒します。
動作環境
- Ruby 1.8.7-p243
- RubyGems 1.3.5
- Sinatra 0.9.4
WebサーバとしてWebrickを直接使うのと大差ないとは思いますが、一応Sinatraを使っています。
require 'rubygems' require 'sinatra' # パス /devfest へのHTTP GET処理 get '/devfest' do input = params[:n].to_i content_type 'text/plain' convert(input) end # 数値→漢数字変換 # 兆/億/万の単位で区切り、各単位ごとに千以下の位を convert_sub で変換する。 def convert(input) output = "" cho = input / 1000000000000 output_cho = convert_sub(cho) output << output_cho + 'X' if output_cho != "" oku = (input - cho*1000000000000) / 100000000 output_oku = convert_sub(oku) output << output_oku + 'K' if output_oku != "" man = (input - cho*1000000000000 - oku*100000000) / 10000 output_man = convert_sub(man) output << output_man + 'U' if output_man != "" zero = input - cho*1000000000000 - oku*100000000 - man*10000 output << convert_sub(zero) # 入力が0である場合に限ってZ=零を出力 if input == 0 output = 'Z' end return output end # 千以下の位についての数値→漢数字変換 def convert_sub(input) number_map = { 1 => 'R', 2 => 'D', 3 => 'M', 4 => 'B', 5 => 'L', 6 => 'H', 7 => 'A', 8 => 'Y', 9 => 'P'} output = "" sen = input / 1000 if sen >= 2 output << number_map[sen] + 'E' elsif sen == 1 output << 'E' end hyaku = (input - sen * 1000) / 100 if hyaku >= 2 output << number_map[hyaku] + 'J' elsif hyaku == 1 output << 'J' end ju = (input - sen*1000 - hyaku*100) / 10 if ju >= 2 output << number_map[ju] + 'T' elsif ju == 1 output << 'T' end ichi = input - sen*1000 - hyaku*100 - ju*10 if ichi >= 1 output << number_map[ichi] end return output end