任天堂のCode Puzzleがやっと解けました
GAEやPythonの勉強を中断してずっと挑戦していた任天堂のCode Puzzleがやっと最終問題まで解けました。
この問題は9月中頃ツイッターなどで話題になっていたようなのですが、私は10月に入ってから知りせっかくPythonを勉強中だしやってみようと挑戦を始め2週間ほどかかってやっと解くことができました。
速い方だと7,8時間で全問解けるそうですが、私は最終問題にたどり着くまでに3日ほど、最終問題を解くのに10日ほどかかりました。(^_^;)
最終問題に10日もかかったのはあるポイントでずっと詰まっていたからでして、実はクリアできた現在でもいまいちスッキリしていないのですがネタバレを含んでしまうのでエントリの最後に書きたいと思います。
すべて自力で解きました!と言いたいところなのですが最終問題ではid:hirataraさんのヒントを参考にさせていただきました。
感想としてはとにかく楽しかったです。最初の問題で「なんでわざわざこんな書き方を・・・」と思っていたことが実は後の問題への伏線になっているなど、ちょっとしたお遊びとは思えないクオリティで「さすがゲームの任天堂!」とヘンに感心してしまいました。
これまで一度も使ったことがなかったビット演算やPythonの記法、組み込み関数など勉強になることも多かったです。2週間もかけていると途中で何度も諦めようかなと思ったのですがクリア時の達成感は大きいので、もしまだチャレンジしていなければぜひオススメしたいと思います。
ここから下、最終問題について少しネタバレになります。見たくない方はご注意ください。
最終問題で私がずっと詰まっていたのはハッシュ値を算出し、そこから' iTI'の4文字で構成される文字列を求めた後、いよいよ答えの文字列を求めようという部分です。
今回のルールに従って文字列を暗号化すると32文字の空白列の左右から'iTI'の文字でうまっていくことになりますが、これ元の文字列が長いと左右からきた文字が重なることも考えられますよね。
例えば'artgearartgear'という文字列を変換すると
iI ITi i ITiiIi i TiITIIi iI TiITIIiI iI iITiTITTi iIT iITiTITTiIIi iIT ITiTiI IIIIi iITi ITiTiI IIIIii iITi TiTiITiiTIIITIi iITiI TiTiITiiTIIITIiiI iITiI iTiITiIIiTITiTTTTi iITiIT iTiITiIIiTITiTTTTiiIi iITiIT TiITiIIIIiIiT ii ITIIi iITiITi TiITiIIIIiIiT ii ITIIiiI iITiITi iITiIIIIITII iII IiTITTT ITiITiT iITiIIIIITII iII IiTITTT Ti ITiT ITiIIIIITiTT IIT TIiI ii T IiTi ITiIIIIITiTT IIT TIiI ii T ITTi TiIIIIITiT iiTT TTT IIi iiI I i IIIIITiT iiTT TTT IIi iiI T TIIITiT iII i iiiiTII ITTi i T TTIITiT iII i iiiiTII ITTi i i TTiT iIIT Ti iITTIiTT I T T i TITT iIIT Ti iITTIiTT I T T iTi I iiIIT T IT TI iiIi i i iTi I i TT T IT TI iiIi i i TiT I Ti ii iiI I ITII T T
というように左右から埋まる文字が重なって両者を考慮した文字で埋められていくという状況になります。
このパターンも考えないといけないよなーと思っていたので、せめてbars_posの最終位置や最後の一文字くらいは分からないと解きようがない!となって詰まっていました。そのヒントがHTMLのどこかに書かれているんじゃないかと血眼になって探しました(^_^;)
このようなパターンは考えなくてもいいという事がわかるヒントがどこかにあるのですかね・・・。
とりあえずそれはないと仮定して解いてみればいいじゃん!て言われたらその通りなのですが。
ちなみにハッシュ値を求めるのにも3,4日かかりました。汗
(3,4日かけて総当りしてたんじゃないですよ!)