バックグラウンド
BWT(Burrows、Wheeler、Backで見られる)とMTF(Move to the printable ASCII frontで見られる)を適用した後、bzip2コンプレッサーはかなりユニークな形式のランレングスエンコーディングを適用します。
定義
この課題のために、変換BRLEを次のように定義します。
0x20〜0x7Aのコードポイントを持つASCII文字のみで構成される入力文字列sを指定して、次の操作を行います。
等しい文字の各実行をその文字の1回の出現で置き換え、最初の文字以降の繰り返し回数を保存します。
繰り返し数を符号化文字の最初の発生の後に使用して、全単射ベース2記数や記号
{
などを}
。非負整数nは文字列として符号化されたB K ... B 0ように、N = 2 K I(BのK)+ ... + 2 0、I(B 0)、I(
{
)= 1とI(}
)= 2。この表現は常に一意であることに注意してください。たとえば、数値0は空の文字列としてエンコードされます。
対応する文字が1回出現した後、繰り返し回数をエンコードする中括弧の文字列を挿入します。
ステップバイステップの例
Input: "abbcccddddeeeeeffffffggggggghhhhhhhh"
Step 1: "abcdefgh" with repetitions 0, 1, 2, 3, 4, 5, 6, 7
Step 2: "" "{" "}" "{{" "{}" "}{" "}}" "{{{"
Step 3: "ab{c}d{{e{}f}{g}}h{{{"
仕事
STDINから、またはコマンドラインまたは関数の引数として単一の文字列を読み取り、入力文字列のBRLEまたはその逆を出力または返す、複雑なプログラムまたは関数を実装します。
入力に中括弧が含まれていない場合は、BRLEを適用します。入力に中括弧が含まれる場合は、その逆を適用します。
例
INPUT: CODEGOLF
OUTPUT: CODEGOLF
INPUT: PROGRAMMING
OUTPUT: PROGRAM{ING
INPUT: PUZ{LES
OUTPUT: PUZZLES
INPUT: 444488888888GGGGGGGGGGGGGGGGWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
OUTPUT: 4{{8{{{G{{{{W{{{{{
INPUT: y}}}{{
OUTPUT: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
追加のルール
あなたはできません BRLEや文字列のその逆数を計算する任意のビルトインを使用します。
次のビルトインを使用できます。
繰り返し回数が全単射のbase-2に保存されていない限り、文字列のRLEまたはRLDを計算します。
あらゆる種類のベース変換を実行します。
出力にSTDOUTを選択すると、コードが末尾の改行を出力する場合があります。
コードは、0x20から0x7Aの範囲の1000文字以下のASCII文字、および中括弧(0x7Bおよび0x7D)の入力に対して機能する必要があります。
入力に中かっこが含まれている場合、BRLEを文字列に適用した有効な結果であると想定できます。
標準コードのゴルフ規則が適用されます。バイト単位の最短提出が勝ちです。