Engee 文档
Notebook

将文字翻译成莫尔斯电码

莫尔斯电码又称摩尔斯电码,是一种传输文字信息的系统。它基于两个不同持续时间的信号,即点(短信号)和破折号(长信号)。该系统由美国发明家塞缪尔-莫尔斯于 19 世纪上半叶发明,是最早的电报通信方法之一。

每个字母、数字和一些标点符号都由独特的点和破折号组合表示,例如,字母 A 以点-破折号(.-)的形式传输,字母 B 则以破折号-点-点-点-点-点(-...)的形式传输。 一个字符内连续两个点或破折号之间的停顿很短,不同字符(字母或数字)之间的停顿稍长。反过来,单词之间的停顿更长。

莫尔斯电码被广泛应用于远距离电报传输。它还用于无线电通信,尤其是海运和航空业。

如今,无线电爱好者和复古技术爱好者仍在继续研究和使用莫尔斯电码,因为信号传输可以通过电报键等简单设备完成,而且由于其简单性,即使在通信条件差的情况下也能识别信号。

现在,根据上述该系统的理论基础,让我们来定义拉丁字母和阿拉伯数字字典。

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' => "--.-"
  ⋮   => ⋮

我们来定义莫尔斯电码格式的字符串翻译函数。该函数在字典中搜索一个值。如果未找到该值,则保持不变。

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)
. -. --. . . !

输出

演示结果证实该函数工作正常。由于感叹号在字典中没有值,我们在输出中得到了这个标记。