class RunLengthEncoding

Public Class Methods

decode(input) click to toggle source
# File lib/run_length_encoding.rb, line 13
def self.decode(input)
  out = []
  groups = input.scan(/\d+|[A-Za-z\s]/)
  (0..groups.length).each do |i|
    if groups[i].to_i != 0
      out.push groups[i + 1] * (groups[i].to_i-1)
    else
      out.push groups[i]
    end
  end
  out.join('')
end
encode(input) click to toggle source
# File lib/run_length_encoding.rb, line 2
def self.encode(input)
  groups = []
  encode_string = []
  input.scan(/((.)\2*)/) { |x| groups.push(x[0]) }
  groups.each do |x|
    encode_string.push x.chars.length if x.chars.length >= 2
    encode_string.push x.chars[0]
  end
  encode_string.join('')
end