「001111111111555555555599944578888」
とある案件でこのようなコードの桁数を短くする要望が発生してしまった。
ここは「圧縮」である。
「圧縮」でイメージするのはjpegやlzhなど。敷居が高く感じる。だが調べてみると思ったほど難しく無かった。
中でもランレングス圧縮という方法はわかりやすくすぐ実装できそうだ。
早速エディタを起動しキーボードを叩き始める。
ランレングスはざっくりいうと「同じデータはまとめてしまえ」という手法である。
「11111」のように数値の「1」が5回続いた場合は115( 1を2回書くことで2回以上続いていることを表す)のように記述する。
もっとも2回しか連続してしない場合は3文字使ってしまうので、元のデータより桁数は増えてしまう。
今回のコードは比較的同じ数値が連続することが多いので効果が期待できそう。
実装を終えテストしてみるとなかなかいい具合ではないか。
もう少し短くするため36進数変換し、さらに何箇所かにハイフンを入れる。これで大分見やすくなった。
今回はactionScript案件ではあったが、javascriptに移植してみた。
以下URLにてテスト可能なので興味があったらお試しを。
http://nouv.biz/labo/20140810_runlength/RunLengthTest.html