Lý lịch
Sau khi áp dụng BWT (như đã thấy trong Burrows, Wheeler và Back ) và MTF (như đã thấy trong Move to front in ASCII có thể in ), máy nén bzip2 áp dụng một hình thức mã hóa độ dài chạy khá độc đáo.
Định nghĩa
Với mục đích của thử thách này, chúng tôi xác định BRLE chuyển đổi như sau:
Với một chuỗi đầu vào s mà chỉ bao gồm các ký tự ASCII với các điểm mã giữa 0x20 và 0x7A, làm như sau:
Thay thế mỗi lần chạy các ký tự bằng nhau bằng một lần xuất hiện của ký tự và lưu trữ số lần lặp lại sau lần đầu tiên.
Mã hóa số lần lặp lại sau lần xuất hiện đầu tiên của ký tự , sử dụng số 2 cơ sở tính toán và các ký hiệu
{
và}
.Một số nguyên n không âm được mã hóa thành chuỗi b k lệch b 0 sao cho n = 2 k i (b k ) + Lỗi + 2 0 i (b 0 ) , trong đó i (
{
) = 1 và i (}
) = 2 .Lưu ý rằng đại diện này luôn là duy nhất. Ví dụ, số 0 được mã hóa dưới dạng một chuỗi rỗng.
Chèn chuỗi dấu ngoặc nhọn mã hóa số lần lặp lại sau lần xuất hiện duy nhất của ký tự tương ứng.
Ví dụ từng bước
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{{{"
Bài tập
Thực hiện một chương trình hoặc hàm không liên quan đọc một chuỗi từ STDIN hoặc dưới dạng đối số dòng lệnh hoặc hàm và in hoặc trả về BRLE hoặc nghịch đảo của chuỗi đầu vào.
Nếu đầu vào không chứa dấu ngoặc nhọn, hãy áp dụng BRLE. Nếu đầu vào chứa dấu ngoặc nhọn, áp dụng nghịch đảo của nó.
Ví dụ
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
Quy tắc bổ sung
Bạn không thể sử dụng bất kỳ phần dựng sẵn nào để tính BRLE hoặc nghịch đảo của chuỗi.
Bạn có thể sử dụng tích hợp sẵn:
Tính toán RLE hoặc RLD của một chuỗi, miễn là số lần lặp lại không được lưu trữ trong cơ sở tính toán-2.
Thực hiện chuyển đổi cơ sở của bất kỳ loại.
Mã của bạn có thể in một dòng mới theo dõi nếu bạn chọn STDOUT cho đầu ra.
Mã của bạn phải hoạt động cho bất kỳ đầu vào nào có 1000 ký tự ASCII trở xuống trong phạm vi từ 0x20 đến 0x7A, cộng với dấu ngoặc nhọn (0x7B và 0x7D).
Nếu đầu vào chứa dấu ngoặc nhọn, bạn có thể cho rằng đó là kết quả hợp lệ của việc áp dụng BRLE cho chuỗi.
Quy tắc golf tiêu chuẩn áp dụng. Đệ trình ngắn nhất tính bằng byte thắng.