Sha256: 8b383f6c93e8fa685a77d75bb4fb326dd464a109dc5b26539e775d206c5ebd35

Contents?: true

Size: 619 Bytes

Versions: 41

Compression:

Stored size: 619 Bytes

Contents

defmodule RunLengthEncoder do

  @spec encode(String.t) :: String.t
  def encode(string) do
    Regex.scan(~r/([a-zA-Z ])\1*/, string)
    |> Enum.map_join(fn([run, c]) ->
      if String.match?(run, ~r/\s+/) do
        run
      else
        times = String.length(run)
        number = if times == 1 do "" else times end
          "#{number}#{c}"
      end
    end)
  end

  @spec decode(String.t) :: String.t
  def decode(string) do
    Regex.scan(~r/(\d*)(.)/, string)
    |> Enum.map_join(fn [_,n,c] ->
      times = if n == "" do 1 else String.to_integer(n) end
      String.duplicate(c, times)
    end)
  end
end

Version data entries

41 entries across 41 versions & 1 rubygems

Version Path
trackler-2.0.8.10 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.8.9 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.8.8 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.8.7 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.8.6 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.8.5 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.8.4 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.8.3 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.8.2 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.8.1 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.7.0 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.6.44 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.6.43 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.6.42 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.6.41 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.6.40 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.6.39 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.6.38 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.6.37 tracks/elixir/exercises/run-length-encoding/example.exs
trackler-2.0.6.36 tracks/elixir/exercises/run-length-encoding/example.exs