The Julia Geek

Posted on

# Splitting and Joining Strings to Translate Morse Code π

Splitting and joining strings are two prominent actions in working on textual data. A good example of training these two concepts is to translating Morse codes. For this, we can create a Morse code dictionary like the following one:

``````codes = 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", ".----"=>"1",
"..---"=>"2", "...--"=>"3", "....-"=>"4", "....."=>"5", "-...."=>"6", "--..."=>"7",
"---.."=>"8", "----."=>"9", "-----"=>"0", ""=>" "
)
``````

So I consider an arbitrary rule that letters should be distinguished by a space and words by two spaces. So I define my `morse` function that gets an input of type `String` and another of type `Dict{String, String}`. First, it splits the input by a space and then translates each segment using the predefined dictionary. Then at the end, I join the content of the translated codes to accomplish the message:

``````function morse(code::String, dictionary::Dict{String, String})
splitted = split(code, " ")
letters = get.(Ref(dictionary), splitted, nothing)
join(letters)
end
``````

Now I'm ready to use the function:

``````morse(
"..  .-.. --- ...- .  .--- ..- .-.. .. .-",
codes
)

# "I LOVE JULIA"
``````

But you know that Morse codes can also be used to deliver critical messages to the world. Then, do you want to try the translation of the following morse code?

``````morse(
".-- --- -- .- -.  .-.. .. ..-. .  ..-. .-. . . -.. --- --",
codes
)
``````

Cheers π»