#!/usr/bin/ruby
# https://rosettacode.org/wiki/Run-length_encoding
func encode (str) {
var input = str.chars;
var encoding = [];
var count = 1;
var prev = input[0];
for (var i = 1; i <= (input.end); i++) {
if (input[i] != prev) {
encoding.push([count, prev]);
count = 1;
prev = input[i];
}
else {
count++;
}
}
encoding.push([count, prev]);
return(encoding);
}
func decode (encoded) {
var output = '';
for i in (encoded) {
output += (i[1] * i[0])
}
return(output);
}
var str = 'WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW' -> say;
var encoded = (encode(str)) -> dump -> say;
var decoded = (decode(encoded)) -> say;
str == decoded || ("Failed!\n".die);