Sha256: 2c5d3febbba296ad4b76bd113ad11b97f638f2994993494d5a1ce88190f2ecf4

Contents?: true

Size: 676 Bytes

Versions: 69

Compression:

Stored size: 676 Bytes

Contents

defmodule CryptoSquare do
  @doc """
  Encode string square methods
  ## Examples

    iex> CryptoSquare.encode("abcd")
    "ac bd"
  """
  @spec encode(String.t()) :: String.t()
  def encode(""), do: ""

  def encode(str) do
    normalized = normalize_string(str)
    section_length = normalized |> byte_size |> :math.sqrt() |> Float.ceil() |> trunc

    normalized
    |> String.graphemes()
    |> Enum.chunk(section_length, section_length, List.duplicate("", section_length))
    |> List.zip()
    |> Enum.map(&Tuple.to_list/1)
    |> Enum.join(" ")
  end

  defp normalize_string(str) do
    str
    |> String.downcase()
    |> String.replace(~r/[^a-z0-9]/, "")
  end
end

Version data entries

69 entries across 69 versions & 1 rubygems

Version Path
trackler-2.2.1.159 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.158 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.157 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.156 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.155 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.154 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.153 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.152 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.151 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.150 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.149 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.148 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.147 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.146 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.145 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.144 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.143 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.142 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.141 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.140 tracks/elixir/exercises/crypto-square/example.exs