Sha256: ca6f327e4047569543c9af6ce72612eba7a23cef1f67c06ed89b84575e55689f

Contents?: true

Size: 855 Bytes

Versions: 131

Compression:

Stored size: 855 Bytes

Contents

defmodule Atbash do
  @key Enum.zip(?a..?z, ?z..?a) |> Enum.into(%{})

  @doc """
  Encode a given plaintext to the corresponding ciphertext

  ## Examples

  iex> Atbash.encode("completely insecure")
  "xlnko vgvob rmhvx fiv"
  """
  @spec encode(String.t()) :: String.t()
  def encode(plaintext) do
    plaintext |> normalize |> transpose |> chunk |> Enum.join(" ")
  end

  @spec decode(String.t()) :: String.t()
  def decode(cipher) do
    cipher |> normalize |> transpose
  end

  defp normalize(input) do
    Regex.replace(~r{\W}, String.downcase(input), "")
  end

  defp transpose(text) do
    text
    |> String.to_charlist()
    |> Enum.map(&convert/1)
    |> List.to_string()
  end

  defp convert(character) do
    Map.get(@key, character, character)
  end

  defp chunk(input) do
    Regex.scan(~r(.{1,5}), input) |> List.flatten()
  end
end

Version data entries

131 entries across 131 versions & 1 rubygems

Version Path
trackler-2.2.1.139 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.138 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.137 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.136 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.135 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.134 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.133 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.132 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.131 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.130 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.129 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.128 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.127 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.126 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.125 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.124 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.123 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.122 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.121 tracks/elixir/exercises/atbash-cipher/example.exs
trackler-2.2.1.120 tracks/elixir/exercises/atbash-cipher/example.exs