この記事は 文字 Advent Calendar 2017 5日目の記事です。果して「文字アドベントカレンダー」に投稿していいのか、よくわからないですが、開いていたので投稿させてもらうことにしました。
一つ前(3日目)の記事 → Twitterの文字数カウントの新仕様について - Qiita
Code Quest とは
GeekOutさんが公開した、プログラミング学習用ゲームみたいなものです。今回はこの中から「圧縮ノ試練」を解こうと思います。
圧縮の試練
Code Quest にある4つの試練の1つです。ノーマルとエクストラの2つのレベルがあります。
ノーマル
gg?aag??aa??gaa
パット見て (gggaa)3
で行けるなって気づいたので (g3a2)3
で7文字クリアです。圧縮の試練はプログラム書いて説かせるよりも自分で考えたほうが早いなと思いました。
エクストラ
g??g?a?gaa?g?agg?a?gga?ggaag?g?aggaa?gaa?g?aa
まずパット見た感じ、 ggaa
あるいは aagg
が多そうに見えたので、 (aagg)X
または (ggaa)X
*1 でなんとか圧縮できないかなと思いました。そこでなんとなく、 (aagg)X
でまとめられそうなところを抜き出してみます
g??g <- ここはaaggの形にはできない ?a?g aa?g ?agg ?a?g <- (aagg)4 にできる g <- gがあまり a?gg aag? <- (aagg)2 g <- gがあまり ?agg aa?g aa?g <- (aagg)3 ?aa <- あまり
しかしこれでは g4(aagg)4g(aagg)2g(aagg)3a3
27文字で、15文字には全く届きません。。ただ、g
が余るケースが多いので、 ((aagg)Xg)Y
*2 の形に出来ないかなと、つまり ((aagg)3g)3
みたいなのを目指そうと思います。すると、
g??g ?a?g aa?g ?agg ? <- (aagg)3g a?gg a?gg aag? g <- (aagg)3g ?agg aa?g aa?g ? <- (aagg)3g aa
こうできることに気づきました。最終的には g4((aagg)3g)3aa
とできて15文字ピッタリでクリアできました。*3
圧縮の試練以外の問題もクリアしたので、随時記事にしていこうと思います。