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.139 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.138 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.137 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.136 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.135 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.134 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.133 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.132 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.131 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.130 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.129 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.128 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.127 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.126 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.125 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.124 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.123 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.122 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.121 tracks/elixir/exercises/crypto-square/example.exs
trackler-2.2.1.120 tracks/elixir/exercises/crypto-square/example.exs