Engee documentation
Notebook

Translating text into Morse code

Morse code, also known as Morse code, is a system for transmitting textual information. It is based on the use of two signals of different duration — dots (short signal) and dashes (long signal). This system was developed by American inventor Samuel Morse in the first half of the 19th century and became one of the first methods of telegraphic communication.

Each letter of the alphabet, a number, and some punctuation marks are represented by a unique combination of dots and dashes, for example, the letter A is passed as a dot-dash (.–), and the letter B is dash—dot-dot-dot (-...).
A short pause is made between two consecutive dots or dashes inside one character, between in different characters (letters or numbers) — the pause is slightly longer. In turn, the pause between words is even longer.

Morse code was widely used in telegraphy to transmit messages over long distances. It has also found applications in radio communications, especially in the maritime and aviation industries.

Nowadays, Morse code continues to be studied and applied by radio enthusiasts and retro technology enthusiasts, as signal transmission can be carried out using simple devices such as a telegraph key, and even under poor communication conditions, signals can be recognized due to their simplicity.

Now, based on the theoretical foundations of this system described above, we will define a dictionary for Latin letters and Arabic numerals.

In [ ]:
# Словарь для преобразования символов в азбуку Морзе
morse_code = Dict(
    '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' => "--..",
    '0' => "-----",
    '1' => ".----",
    '2' => "..---",
    '3' => "...--",
    '4' => "....-",
    '5' => ".....",
    '6' => "-....",
    '7' => "--...",
    '8' => "---..",
    '9' => "----.",
    ' ' => "/" # Пробел между словами обозначается слешем
)
Out[0]:
Dict{Char, String} with 37 entries:
  '1' => ".----"
  'E' => "."
  'Z' => "--.."
  '6' => "-...."
  'X' => "-..-"
  '7' => "--..."
  'B' => "-..."
  'C' => "-.-."
  '5' => "....."
  'D' => "-.."
  'A' => ".-"
  '4' => "....-"
  'R' => ".-."
  'G' => "--."
  '8' => "---.."
  'F' => "..-."
  'N' => "-."
  'M' => "--"
  'K' => "-.-"
  'J' => ".---"
  'O' => "---"
  'I' => ".."
  'P' => ".--."
  'H' => "...."
  'Q' => "--.-"
  ⋮   => ⋮

Let's define a newline function in the Morse code format. This function searches for the meaning in the dictionary. If the value is not found, it leaves it unchanged.

In [ ]:
function text_to_morse(text::String)
    morse_message = String[]  
    for char in uppercase(text)
        if haskey(morse_code, char)
            push!(morse_message, string(morse_code[char]))  # Присваиваем значение из словаря
        else
            push!(morse_message, string(char))  # Оставляем исходный символ
        end
    end
    return join(morse_message, " ")  # Объединяем элементы вектора через пробел
end
Out[0]:
text_to_morse (generic function with 1 method)
In [ ]:
# Пример использования функции
input_text = "ENGEE!"
output_morse = text_to_morse(input_text)
println(output_morse)
. -. --. . . !

Conclusion

The results of the demonstration confirm that this function is working correctly. Due to the fact that the exclamation mark does not have a dictionary value, we get this sign at the output.