かーみーのだらだら雑記

2010-10-23

NumberMagicEasyリベンジ編

[追記]10/24 1:39 タイトル修正、表の修正

前回書いたコードがあまりにもひどいのでやり直してみました。


入力される文字列に対しての数値に注目すると、以下のようなことが分かります。

入力出力入力出力
YYYY1NYYY9
YYYN2NYYN10
YYNY3NYNY11
YYNN4NYNN12
YNYY5NNYY13
YNYN6NNYN14
YNNY7NNNY15
YNNN8NNNN16

よく見てみると入力をY=0、N=1として見ると2進数を10進数で返していることが分かります。

上の表を"0","1"で置換してみるとこうなります。

入力出力入力出力
0000110009
00012100110
00103101011
00114101112
01005110013
01016110114
01107111015
01118111116

ということで、プログラムの流れとしては、

入力された文字列を1と0に置き換え
↓
10進数に変換
↓
1増やして返す

となります。

で、実装するとこうなります。

public class NumberMagicEasy {
  public int theNumber(String answer) {
    answer = answer.replace('Y', '0');
    answer = answer.replace('N', '1');
    return Integer.parseInt(answer, 2) + 1;
    }
}

前回のものと比べるとかなりシンプルになりました。

これは翌朝の通学中に気付いたわけですが、

TopCoderでは回答時間内にこういったことを考えコードを書いているので

わたしはまだまだですね。

前回のコードを書いた奴を殴りたい。

トラックバック - http://d.hatena.ne.jp/carme-264pp/20101023/1287798046