ダブルランレングスエンコーディング


9

誰もがランレングスエンコーディングとは何かを知っています。これは、すでに多くのコードゴルフの課題の対象となっています。特定のバリエーションを見ていきます。

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つのシンボルの実行を処理するため、エンコードされていません。

これはので、最短のコードが優先されます。タイブレーカーは早期提出です。


私が何かを逃した場合、または何か不明な場合は、コメントでお知らせください。


しかし、4があります67
Leaky Nun

処理する必要があります441444144414-> ((4414)(3))
Leaky Nun

修正しました。
ericw31415 2016年

@KennyLauいいえ、あなたはしません。4414技術的には4のシリーズです。私の言い回しはただ悪いです
ericw31415 2016年

111111111としてエンコードできます(1)(9)か?
CalculatorFeline

回答:


2

Retina、162バイト

+{`((\d)\2*(?!\2)(\d)\3*|\d)(?<1>\1)+
<<$1><$#1>>
<<([^<>]{1,7})><2>>
$1$1
<<([^<>]{1,3})><3>>
$1$1$1
<<([^<>]{1,2})><4>>
$1$1$1$1
}`<<(.)><(\d+)>>
$1($2)
T`<>`()

オンラインでお試しください!


入力した10101010100100100100100場合、出力はになりますが((10)(5))0((100)(4))((10)(4))((100)(5))1文字短くなります。
Marv 2016年

このような限界的なテストケースを本当に使用する必要がありますか?
Leaky Nun

はい、それだけで楽しいです!:^)
マーヴ

これが現在ここで唯一の答えであるのはおかしいです。
ericw31415 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.