[追記]10/24 1:39 タイトル修正、表の修正
前回書いたコードがあまりにもひどいのでやり直してみました。
入力される文字列に対しての数値に注目すると、以下のようなことが分かります。
入力 | 出力 | 入力 | 出力 |
---|---|---|---|
YYYY | 1 | NYYY | 9 |
YYYN | 2 | NYYN | 10 |
YYNY | 3 | NYNY | 11 |
YYNN | 4 | NYNN | 12 |
YNYY | 5 | NNYY | 13 |
YNYN | 6 | NNYN | 14 |
YNNY | 7 | NNNY | 15 |
YNNN | 8 | NNNN | 16 |
よく見てみると入力をY=0、N=1として見ると2進数を10進数で返していることが分かります。
上の表を”0″,”1″で置換してみるとこうなります。
入力 | 出力 | 入力 | 出力 |
---|---|---|---|
0000 | 1 | 1000 | 9 |
0001 | 2 | 1001 | 10 |
0010 | 3 | 1010 | 11 |
0011 | 4 | 1011 | 12 |
0100 | 5 | 1100 | 13 |
0101 | 6 | 1101 | 14 |
0110 | 7 | 1110 | 15 |
0111 | 8 | 1111 | 16 |
ということで、プログラムの流れとしては、
入力された文字列を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では回答時間内にこういったことを考えコードを書いているので
わたしはまだまだですね。
前回のコードを書いた奴を殴りたい。