猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

Code Quest の「圧縮ノ試練」を何のひねりもなく頑張ってクリアする

この記事は 文字 Advent Calendar 2017 5日目の記事です。果して「文字アドベントカレンダー」に投稿していいのか、よくわからないですが、開いていたので投稿させてもらうことにしました。

一つ前(3日目)の記事 → Twitterの文字数カウントの新仕様について - Qiita

Code Quest とは

geek-out.jp

GeekOutさんが公開した、プログラミング学習用ゲームみたいなものです。今回はこの中から「圧縮ノ試練」を解こうと思います。

圧縮の試練

Code Quest にある4つの試練の1つです。ノーマルとエクストラの2つのレベルがあります。

ノーマル

f:id:yoshiki_utakata:20171204153647p:plain

gg?aag??aa??gaa

パット見て (gggaa)3 で行けるなって気づいたので (g3a2)3 で7文字クリアです。圧縮の試練はプログラム書いて説かせるよりも自分で考えたほうが早いなと思いました。

エクストラ

f:id:yoshiki_utakata:20171204154016p:plain

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

圧縮の試練以外の問題もクリアしたので、随時記事にしていこうと思います。

*1:Xは数字

*2:X, Y は数字

*3:gg と g2 は文字数が同じなのでどちらで書いても良い