run_length_encoding.sf 471 B

12345678910111213141516171819202122232425
  1. #!/usr/bin/ruby
  2. # https://rosettacode.org/wiki/Run-length_encoding
  3. func encode(str) {
  4. str.gsub(/(.)(\1{0,254})/, {|a,b| b.len+1 -> chr + a})
  5. }
  6. func decode(str) {
  7. var chars = str.chars
  8. var r = ''
  9. (chars.len/2 -> int).range.each { |i|
  10. r += (chars[2*i + 1] * chars[2*i].ord)
  11. }
  12. return r
  13. }
  14. var str = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"
  15. var e = encode(str)
  16. say str
  17. say e.dump
  18. var d = decode(e)
  19. say d