Sha256: 315ef7116ad6a49e545a6d8cd70e5c7db4848261339e02c7595573359cf6b2de

Contents?: true

Size: 638 Bytes

Versions: 69

Compression:

Stored size: 638 Bytes

Contents

defmodule RunLengthEncoder do
  @spec encode(String.t()) :: String.t()
  def encode(string) do
    Regex.scan(~r/([a-zA-Z\s])\1*/, string)
    |> Enum.map_join(fn [run, c] ->
      times = String.length(run)

      number =
        if times == 1 do
          ""
        else
          times
        end

      "#{number}#{c}"
    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

69 entries across 69 versions & 1 rubygems

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