Latar Belakang
The Langkah-to-front transform (MTF) adalah data yang pengkodean algoritma yang dirancang untuk meningkatkan kinerja teknik encoding entropi.
Dalam algoritma kompresi bzip2 , ini diterapkan setelah transformasi Burrows-Wheeler (seperti yang terlihat di Burrows, Wheeler dan Kembali ), dengan tujuan mengubah kelompok karakter yang diulang menjadi bilangan bulat non-negatif yang kecil dan mudah dikompres.
Definisi
Untuk tujuan tantangan ini, kami akan menentukan versi MTC ASCII yang dapat dicetak sebagai berikut:
Diberikan string input s , ambil array kosong r , string d dari semua karakter ASCII yang dapat dicetak (0x20 hingga 0x7E) dan ulangi yang berikut untuk setiap karakter c dari s :
Tambahkan indeks c dalam d ke r .
Pindahkan c ke bagian depan d , yaitu, hapus c dari d dan tambahkan ke sisanya.
Akhirnya, kita mengambil elemen r sebagai indeks dalam d asli dan mengambil karakter yang sesuai.
Contoh langkah demi langkah
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"
Tugas
Tulis program atau fungsi yang mengimplementasikan MTF ASCII yang dapat dicetak (sebagaimana didefinisikan di atas).
Uji kasus
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(**:
Aturan tambahan
Anda tidak dapat menggunakan operator bawaan yang menghitung MTF string.
Kode Anda dapat mencetak baris tambahan jika Anda memilih STDOUT untuk hasil.
Kode Anda harus berfungsi untuk input 1000 atau kurang karakter ASCII yang dapat dicetak (0x20 hingga 0x7E).
Aturan golf kode standar berlaku. Pengajuan terpendek dalam byte menang.