誰もがランレングスエンコーディングとは何かを知っています。これは、すでに多くのコードゴルフの課題の対象となっています。特定のバリエーションを見ていきます。
例
Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322
括弧内の数値は、前のシンボルが発生した回数を示しています。この例では、5文字以上のランのみがエンコードされました。これは、4回以下のエンコード実行では文字数が改善されないためです。
チャレンジ
このランレングスエンコーディングのバリエーションを実装する関数/プログラムを記述しますが、2つのシンボルのランをエンコードすることもできます。2つのシンボルのランも括弧で囲む必要があります。グループも括弧で囲まれます。プログラムは文字列を入力として受け入れ、文字列を短くする変更を加えた変更後の文字列を出力する必要があります。
例
Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123
ノート
111
エンコード(1(3)
)が短くないため、エンコードされませんでした。- 文字列
444111
は3回出現するため、エンコードされます。 676767
((67)(4))
以前より長いため、エンコードされませんでした。222222277777222222277777
としてエンコードされていません((222222277777)(2))
。どうして?それ222222277777
自体をに減らすことができるから2(7)7(5)
です。123123123123
プログラムは3つのシンボルではなく2つのシンボルの実行を処理するため、エンコードされていません。
これはコードゴルフなので、最短のコードが優先されます。タイブレーカーは早期提出です。
私が何かを逃した場合、または何か不明な場合は、コメントでお知らせください。
処理する必要があります
—
Leaky Nun
441444144414
-> ((4414)(3))
?
修正しました。
—
ericw31415 2016年
@KennyLauいいえ、あなたはしません。
—
ericw31415 2016年
4414
技術的には4のシリーズです。私の言い回しはただ悪いです
111111111
としてエンコードできます(1)(9)
か?
67
。