Post History
Run-length encoding is a simple compression technique which compresses sequences of repeating identical bytes. The encoding rules for this task are as follows: Any sequence of $n$ identical bytes...
#1: Initial revision
Run-length encode a byte sequence
Run-length encoding is a simple compression technique which compresses sequences of repeating identical bytes. The encoding rules for this task are as follows: Any sequence of $n$ identical bytes ($3 \leq n \leq 63$) is replaced by a byte with value `n+0xc0` followed by only one copy of that byte. If any of the original bytes has value `0xc0` or above, such encoding also happens if that byte occurs only one or two times in a row (thus the encoded sequence may actually be longer if such bytes occur). The task is to write a run-length encoder. The input is a sequence of bytes. It may be a sequence of actual bytes, or a sequence of numbers in the range 0 to 255 (inclusive), whichever is more convenient. The output is again a sequence of bytes (again, in any suitable form), which is the proper run-length encoding of the input sequence. Examples (byte values are given in 2-digit hex): ``` 00 01 02 03 04 → 00 01 02 03 04 00 00 00 01 01 00 → c3 00 01 01 00 be bf c0 c1 c2 → be bf c1 c0 c1 c1 c1 c2 00 00 00 … (63 bytes) → ff 00 00 00 00 … (64 bytes) → ff 00 00 00 00 00 … (65 bytes) → ff 00 00 00 00 00 00 … (66 bytes) → ff 00 c3 00 ff ff ff … (63 bytes) → ff ff ff ff ff … (64 bytes) → ff ff c1 ff ff ff ff … (65 bytes) → ff ff c2 ff ff ff ff … (66 bytes) → ff ff c3 ff ``` This is a <span class="badge is-tag">code-golf</span> challenge; the shortest program for a language wins.