1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- #!/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);
|