Wed Aug 12 20:49:10 JST 2015

ちょっと前に YUHA presents C88 謎解き×競技プログラミング 『ある勇者の物語』 | AtCoder というコンテストに まんがタイムきららのドキドキ☆ビジュアル☆コミックス (team) っていうチーム (私とフィナちゃん) で出てた. 普通にプロコンでもあるけど、普通にただの謎解きも出題されて、 とてもおもしろい趣向だった.

最終順位というよりも、一番最後の問題を解けるか、が目的のようにも読めて、 実際、最後の問題を解けたら以降参加していないチームが見受けられた. 今から思えば、プロコンに関しては私程度の実力であっても、 最後の問題はさっと解けたのに.

以降、ネタバレ

我々の回答

All submissions

物語構成

問題は A-J がある. 実は [A-E, F, G-I, J] という4部構成になっている. A-E は独立であって、自由な順に解いて良いのだが、 F を解くためには は A-E を解くために書いたプログラムを必要とする. 実のところ、入力ファイルが 5つ渡されて、食わせてみると F を突破するための キーフレーズが得られるのである.

G-J は、webの上で開いても問題が読めない. これは今から参加しても参加できるのか分からないが、 F の解答をメールで送ると、 Google docs で問題が書かれた url が返信で来るという仕掛けになっている.

J に対しての G-I は先程の F とだいたい同様である. しかし、 少し手こずる仕掛けになっていて、 まず、入力は G のための入力が与えられる. それを正しく食わせると今度は H のための入力が吐かれる. 次にそれを食わせると今度は I のための入力を吐き、 これを食わせると、なかなかによくわからない謎が吐かれる.

考察

というわけで、 出題者の意図を考えれば、順序立てて全部の問題に正答しないと先に進めないようでもある. つまり、最後の問題 J にさえ答えられれば、それでよいのだ. 例え、Standings (順位表) で穴が開いていても、J に答えられたということは、 提出していないだけで、手元では回答があるのだ. そして現実問題、 F, J は所詮、一つの入力について答えられさえすれば良いのだから、 本当に回答プログラムを書く必要はない.

例えば、確か H だったかは、クロスワードパズルを解く問題であった. (縦か横かも分からない、過不足なく十分なワードと、埋めるためのマスが与えられる) J で与えられた H のための入力は、10x10とかそのくらいの大きさのクロスワードパズルであって、 我々も、手で解いた. しかし I の謎解きが分からず、結局タイムオーバーとなった.

感想

他チームを見ると、プロコン強い勢があっさり謎解き部分も解けていて、 謎の相関を感じた.

私としても、 このくらいの長丁場で一度もWAを出さなかったのは初めてかもしれない. G (多角形と点が与えられて内外関係を調べる) では、 ほとんど久しぶりの幾何で、 ようやく今までこっそり蓄えていたライブラリの出番であって、 バグらずに正答できたので嬉しい.