夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

やっぱ全訳めんどいんで…

こんにちは。お久しぶりです。

なんだかんだ言ってTopCoderから離れていました。


TopCoder用に簡易辞書アプリは作りましたが…(役に立ちそうもない(;・∀・))

で、日本語訳なんですが全訳するのもたるいんで今回は550の概要をのせて、方針をいっておきたいと思います。



では以下が意訳した文章。

二進数の文字列をある方法で暗号化した文字列があります。暗号化された文字列を解読するプログラムを書きなさい。
暗号は隣接する数字を足して順に並べていってつくります。たとえば二進数の"011100011"は0+1,0+1+1,1+1+1...と暗号化されて、"123210122"となります。
ここでそれぞれPを二進数のもとの文字列に含まれる文字の、Qを暗号化された文字列の文字の配列とします。
この時、もし"123210122"を解読したいならば次の手順を踏むことで解読できます。

  1. P[0]を0とする。
  2. Q[i]はP[i-1]+P[i]+P[i+1]の値であるのでQ[0]から順に求めていく。

簡単にいえばこうなります。2は事前にP[i-1]とP[i]がもとまっているはずなのでP[i+1]を求めていくとわかると思います。
また、これをP[0]が1であると仮定して同じ作業を繰り返してください。
もし、解読途中で元の文字列に0と1以外の文字が出てきてしまったら、そのときは"NONE"を返してください。
今回の例で言えば出力結果は次のように成ります:{"011100011", "NONE"}

で、規定は…

クラス名=BinaryCode
メソッド名=decode
パラメーター=String message
返り値=String[]

です。
多分解読作業は単一のメソッドにしたほうが早いでしょうね。
方針としてはとりあえず配列PとQに付け加えさらにもう一個配列用意しておいたほうがいいですかね?…いらないかな?


まぁこの問題はね。問題文にアルゴリズム書いてあるようなもんなので、実装力が問われるんでしょうね。
文字列分割とかまなんでから解こうと思います。