カメヲラボ

主にプログラミングとお勉強全般について書いてます

Basic Wall Maze

  • 本気でcheat(2)

これからが面白いところなのに、早々と対策されてしまいました。残念です。前回の日記で「まだまだ縮む」とコメントしました。実際、nuさんが相当短縮されたようです。なぜまだまだ縮むと言い切れたのか。
出力値は、N,E,S,Wそしてスペースの5種類の文字しかないので、それぞれの記号に0〜4の番号をつけて5進数で表そうとすれば、300バイトの解は


log10(5^300) = 300*log10(5) = 約210桁の10進数
で表すことができるはず。大雑把に予測をすれば、コードの長さも200バイト程になるだろうということになる。しかし、Cでは多倍長の整数が使えないので色々と工夫が必要になってくる。intを使うのか、long longを使うのか。0〜4の番号は、それぞれどの記号に対応させるべきか。なんとなくでは決して短縮できない。

というのも、ただデータを圧縮したところでデコード部が長くなると無意味だし、整数値を使うのなら、最終的に文字リテラルを使用してさらに短縮したいからだ。

適切なエンコード!短く書くデコード・プログラム!!考えるだけでもゾクゾクうはうはなのだが、今までのSubmitが無効になった時点で気持ちが萎えちゃった(´д`)
「このテキストデータを表示する、最短プログラムを書け」みたいな問題だったら良かったのにナァ・・・。