#!/usr/bin/ruby
# https://rosettacode.org/wiki/Run-length_encoding
func encode(str) {
str.gsub(/(.)(\1{0,254})/, {|a,b| b.len+1 -> chr + a});
}
func decode(str) {
var chars = str.chars;
var r = '';
(chars.len/2 -> int).range.each { |i|
r += (chars[2*i + 1] * chars[2*i].ord);
}
return r;
}
var str = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW";
var e = encode(str);
e == "\fW\1B\fW\3B\30W\1B\16W" || die "error 1";
decode(e) == str || die "error 2";
say "** Test passed!";