私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「【コードミステリ】数字に隠されたメッセージ」(CodeIQ)を参照してください。
問題
ミステリ小説『顔貌売人 ハッカー探偵 鹿敷堂桂馬』にちなんだ、簡単なプログラムを書いてみよう!
数字に隠されたメッセージを、見事読み取ることができるかな?
各行から得られる正の整数(1~9999)を16で割ります。
得られた数字に応じて、以下の表を元に文字を得て、全て連結して出力して下さい。
対応表
得られた数字 出力する文字 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 a 11 b 12 c 13 d 14 e 15 f
入力例1
10
12
14
17
出力例1
ace1
入力例2
6562
5963
1450
2077
出力例2
2bad
Rubyで解答しています。
#!/usr/bin/ruby # main ret = "" while line = gets line.strip! next if line.empty? ret += (line.to_i % 16).to_s(16) end puts ret
非常に簡単です。
入力値を数値にして16で割った余りを文字列にして繋げれば答えになります。
回答後に解法が書かれていて、一つは私の実装と同じでした。
もう一つは入力値を16進数にしてその末尾をとるという方法でした。確かに0進数から16進数への変換は16で割った余りを使うのでこれでもできます。この発想はなかったなぁ。