Sha256: 5f379ea173c4317c772587446ab540f92c0638fdce46e9ad56ef96fa3b6888d9

Contents?: true

Size: 822 Bytes

Versions: 366

Compression:

Stored size: 822 Bytes

Contents

module RunLengthEncoding
  extend self

  def encode(str)
    reader = Char::Reader.new(str)
    String.build do |io|
      while reader.has_next?
        count = 1

        while reader.current_char == reader.peek_next_char
          count += 1
          reader.next_char
        end

        io << count if count > 1
        io << reader.current_char
        reader.next_char
      end
    end
  end

  def decode(str)
    reader = Char::Reader.new(str)
    String.build do |io|
      while reader.has_next?
        num = 0

        while reader.current_char.number?
          num *= 10
          num += reader.current_char.to_i
          reader.next_char
        end

        io << reader.current_char if num == 0
        num.times { |i| io << reader.current_char }
        reader.next_char
      end
    end
  end
end

Version data entries

366 entries across 366 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.179 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.178 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.177 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.176 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.175 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.174 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.173 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.172 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.171 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.170 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.169 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.167 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.166 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.165 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.164 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.163 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.162 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.161 tracks/crystal/exercises/run-length-encoding/src/example.cr
trackler-2.2.1.160 tracks/crystal/exercises/run-length-encoding/src/example.cr