バックグラウンド
最前面への変換(MTF)は、エントロピーエンコーディング技術のパフォーマンスを向上させるために設計されたデータエンコーディングアルゴリズムです。
BZIP2圧縮アルゴリズムの後、それが適用されるバローズ-ウィーラー変換(に見られるようにバローズ、ウィーラー戻る小さい、容易に圧縮非負整数に繰り返される文字のグループを旋回する目的で、)。
定義
この課題のために、MTFの印刷可能なASCIIバージョンを次のように定義します。
入力文字列が与えられ、S、空の配列を取るR、列Dの各文字については、以下のすべての印刷可能なASCII文字の(0x7Eをへの0x20を)と繰り返しCのS:
インデックス付加Cの中のDにR。
cをdの前に移動します。つまり、dからcを削除し、残りの前に追加します。
最後に、rの要素を元の dのインデックスとして使用し、対応する文字を取得します。
ステップバイステップの例
INPUT: "CODEGOLF"
0. s = "CODEGOLF"
d = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = []
1. s = "ODEGOLF"
d = "C !\"#$%&'()*+,-./0123456789:;<=>?@ABDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35]
2. s = "DEGOLF"
d = "OC !\"#$%&'()*+,-./0123456789:;<=>?@ABDEFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47]
3. s = "EGOLF"
d = "DOC !\"#$%&'()*+,-./0123456789:;<=>?@ABEFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37]
4. s = "GOLF"
d = "EDOC !\"#$%&'()*+,-./0123456789:;<=>?@ABFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38]
5. s = "OLF"
d = "GEDOC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40]
6. s = "LF"
d = "OGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40 3]
7. s = "F"
d = "LOGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40 3 45]
8. s = ""
d = "FLOGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABHIJKMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40 3 45 41]
OUTPUT: "COEFH#MI"
仕事
印刷可能なASCII MTF(上記で定義)を実装するプログラムまたは関数を作成します。
テストケース
Input: Programming Puzzles & Code Golf
Output: Prpi"do lp%((uz rnu&3!P/o&$U$(p
Input: NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN BATMAN!
Output: Na! !! !! !! !! !! !! !! !! !! !! !! !! !! !! !!"DDUP"%'
Input: Two more questions and I have bzip2 in less than 100 bytes!
Output: Twp#o"si$sv#uvq(u$(l#o#W!r%w+$pz,xF%#,"x(. #0--'$GG ".z(**:
追加のルール
文字列のMTFを計算する組み込み演算子は使用できません。
出力にSTDOUTを選択すると、コードが末尾の改行を出力する場合があります。
コードは、1000文字以下の印刷可能なASCII文字(0x20〜0x7E)の入力に対して機能する必要があります。
標準コードのゴルフ規則が適用されます。バイト単位の最短提出が勝ちです。