読者です 読者をやめる 読者になる 読者になる

Code Puzzleを解いてみた #codepuzzle

Code Puzzle
↑こちらがPyConJPのチラシに書いてあったらしい問題です。
スタートダッシュが遅かったので開始日が9/18からやり始めて、
終わったのが9/20の2:07にクリア。


表ルートと裏ルートが用意されており、裏ルートに入るためのヒントが表ルートをまず解かないと普通気づかない。
このレベル設定とか、クリア後の達成感はいいと思う。簡単すぎず、時間をかければきっと解けるものとして。
解く行為が楽しめるのはとても良いことだと思う。


以下、感想+ネタバレっぽいヒント、見たくない人はタブを閉じる!





































































問題1

これといったヒントもないですが、総当たりでいける。
ってことでループ文でレッツ総当たり。
答えはすぐ出ました。

問題2

右下に「HINT>」があるのでそこから、
テスト用のpyファイルを持って来て、テストが通るように書きました。
テスト駆動開発が勝手にできる仕組みがこのCode Puzzleで一番ステキだと思いました。
テストを通したら、問題のプログラムを実行すれば、中身わからなくても標準出力で答えが出た。

問題3

上記で作った奴に更に追加で・・・!
ちょっとゴリ押し風味で作ったのでほぼ作り直しました。
といっても、とある場所に「you may use this table :-)」とあるので、
遠慮なくそれをPythonのコードに書き換えて、「HINT>」にあるテストコードを通しました。
あとは「decode_morse」ですが・・・、地味にこいつに気づけませんでした。
単語を調べる重要性をしりましたね・・・。答えだけ知るなら特に実装するひつようはなし。
適切な表とにらめっこして解答出しました。

問題4

これは、問題2の例をよく見るとすぐ答えだせますよね。
「HINT>」にもある通りnext()の逆変換が難しいなら・・・てね。
問題3出来ればここの問題は秒殺だと思います。

裏ルートに入るためのHINT1

クリア後にツイート、FBに書き込んで閉じないようにね!

裏ルートに入るためのHINT2

問題1と似たような構図だなぁ・・・と思ったら勝てた。

裏ルートに入るためのHINT3

正直個人的にこういうのは得意じゃないですな。
全問題で一番時間がかかった。
コード書くわけでもなく、少ない「赤ペン」ヒントから次のヒントへ導く。
これは「Code Puzzle」やない、ただの「Quiz」や!
ここのHINTだけがっかりだったかな。

裏ルートに入るためのHINT4

HINT3の試行錯誤していくうちに「おしい」だの「minihint」だのにぶつかる。
そして全てを総合して最終問題へ行ける。

最終問題

ぽつんとソースファイルがひとつ。HINTも何もない。
中のソースはこれまでに作ってきたもの+アルファで動くようになっている。
まずは足りない関数を補う。あとは今まで血眼になってヒントかき集めていたなら、
sys.argv[1]に何を入れればプログラムが動くかすぐわかるはず。
あとは、人によりけりなんでしょうが、うちの手順は、正攻法の総当りで行くより、逆から攻めた。
複合化→進数変換→bars.next()のゴール算出→1歩前算出→最終的に入力すべき値を1文字ずつ目grep
というラストはすごく原始的な結末。(バックトラッキングで導出する方法もあるらしいが)
でも、4文字目まで正解を出すと残りは自動的に答えが出た。
同時並行で総当りしたけど、結果手計算の方が早く、総当たりでは答えが出ないという始末。
何度か適当に設定したhandle_dataを実行するうちにとある法則がわかるはず。