DEV Community

Discussion on: Daily Challenge #23 - Morse Code Decoder

Collapse
 
brightone profile image
Oleksii Filonenko

Obligatory Elixir:

defmodule Morse do
  @morse_to_char %{
    "-----" => "0",
    ".----" => "1",
    "..---" => "2",
    "...--" => "3",
    "....-" => "4",
    "....." => "5",
    "-...." => "6",
    "--..." => "7",
    "---.." => "8",
    "----." => "9",
    ".-" => "A",
    "-..." => "B",
    "-.-." => "C",
    "-.." => "D",
    "." => "E",
    "..-." => "F",
    "--." => "G",
    "...." => "H",
    ".." => "I",
    ".---" => "J",
    "-.-" => "K",
    ".-.." => "L",
    "--" => "M",
    "-." => "N",
    "---" => "O",
    ".--." => "P",
    "--.-" => "Q",
    ".-." => "R",
    "..." => "S",
    "-" => "T",
    "..-" => "U",
    "...-" => "V",
    ".--" => "W",
    "-..-" => "X",
    "-.--" => "Y",
    "--.." => "Z"
  }

  @spec decode(String.t()) :: String.t()
  def decode(morse) do
    morse
    |> String.split()
    |> Enum.map(&Map.get(@morse_to_char, &1, "?"))
    |> Enum.join()
  end
end