Sha256: 07f6cf891a19211bc4b8f973b577937548960968431287bc8ffe1d743caf39ab
Contents?: true
Size: 842 Bytes
Versions: 86
Compression:
Stored size: 842 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_char_list |> 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
86 entries across 86 versions & 1 rubygems