#!/usr/bin/ruby
# https://rosettacode.org/wiki/Run-length_encoding
func encode (str) {
var chars = str.chars;
var i = 0;
var lc = '';
var output = []
chars.range.each { |index|
if (i > 0 && (chars[index] != lc)) {
output.append(i.to_s + (lc.to_s)); i = 0;
}
elsif (chars.end == index) {
output.append(i + 1 -> to_s + chars[index].to_s);
break;
}
i++; lc = chars[index];
}
output.join(' ');
}
func decode (str) {
var chars = str.chars;
var acc = '';
var output = '';
chars.range.each { |index|
var sc = chars[index].to_s;
if (sc != ' '){
acc += sc;
}
if (sc == ' ' || (chars.end == index)) {
var num = acc.substr(0, -1).to_i;
var chr = acc.substr(-1);
output += (chr * num);
acc = '';
}
}
output;
}
var str = 'WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW' -> say;
var encoded = (encode(str)) -> say;
var decoded = (decode(encoded)) -> say;
str == decoded || ("Failed!\n".die);