Latar Belakang
Setelah menerapkan BWT (seperti yang terlihat di Burrows, Wheeler dan Kembali ) dan MTF (seperti yang terlihat di Pindahkan ke depan ASCII yang dapat dicetak ), kompresor bzip2 menerapkan bentuk pengodean run-length yang agak unik.
Definisi
Untuk tujuan tantangan ini, kami mendefinisikan transformasi BRLE sebagai berikut:
Diberikan string input s yang hanya terdiri dari karakter ASCII dengan titik kode antara 0x20 dan 0x7A, lakukan hal berikut:
Ganti setiap run karakter yang sama dengan kemunculan tunggal karakter dan simpan jumlah pengulangan setelah yang pertama.
Menyandikan jumlah pengulangan setelah kemunculan karakter yang pertama , menggunakan bijective base-2 numeration dan simbol
{
and}
.Sebuah bilangan bulat non-negatif n dikodekan sebagai string b k ... b 0 sehingga n = 2 k i (b k ) + ... + 2 0 i (b 0 ) , di mana i (
{
) = 1 dan i (}
) = 2 .Perhatikan bahwa representasi ini selalu unik. Misalnya, angka 0 dikodekan sebagai string kosong.
Masukkan string kurung keriting yang mengkodekan jumlah pengulangan setelah kemunculan tunggal karakter yang sesuai.
Contoh langkah demi langkah
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{{{"
Tugas
Menerapkan program atau fungsi yang tidak sadar yang membaca string tunggal dari STDIN atau sebagai baris perintah atau argumen fungsi dan mencetak atau mengembalikan BRLE atau kebalikan dari string input.
Jika input tidak mengandung kurung keriting, terapkan BRLE. Jika input berisi kurung keriting, terapkan kebalikannya.
Contohnya
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
Aturan tambahan
Anda tidak dapat menggunakan bawaan apa pun yang menghitung BRLE atau kebalikan dari string.
Anda dapat menggunakan bawaan yang:
Hitung RLE atau RLD dari suatu string, selama jumlah repetisi tidak disimpan dalam bijective base-2.
Lakukan konversi basis apa pun.
Kode Anda dapat mencetak baris tambahan jika Anda memilih STDOUT untuk hasil.
Kode Anda harus berfungsi untuk input 1000 atau kurang karakter ASCII dalam rentang dari 0x20 hingga 0x7A, ditambah kurung keriting (0x7B dan 0x7D).
Jika input berisi kurung keriting, Anda dapat mengasumsikan bahwa itu adalah hasil valid dari menerapkan BRLE ke string.
Aturan golf kode standar berlaku. Pengajuan terpendek dalam byte menang.