Everyone knows what run-length encoding is. It has been the subject of many code-golf challenges already. We'll be looking at a certain variation.
Normal: 11222222222222222222233333111111111112333322 Run-length: 112(19)3(5)1(11)2333322
The number in parentheses specifies the number of times the previous symbol occurred. In the example, only runs of 5 or more characters were encoded. This is because encoding runs of 4 or less doesn't improve the character count.
Write a function/program that implements this variation of run-length encoding, but can also encode runs of two symbols. The runs of two symbols must also be enclosed in parentheses. A group will also be enclosed in parentheses. Your program must accept a string as input, and output the modified string with modifications that shorten the string.
Normal: 111244411144411144411167676767222222277777222222277777123123123123 Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123
111was not encoded because encoding it (
1(3)) is not shorter.
- The string
444111occurs 3 times so it is encoded.
676767was not encoded because
((67)(4))is longer than before.
222222277777222222277777was not encoded as
((222222277777)(2)). Why? Because
222222277777itself can be reduced to
123123123123isn't encoded because your program is supposed to handle runs of two symbols, not three.
This is code-golf so shortest code wins. Tie-breaker is early submission.
If I missed anything, or if you are unsure of anything please notify me in the comments.