Soluzione Morse

21 Feb 2017

Soluzione Morse

MORSE = {
    "!" => "---.", "\"" => ".-..-.", "$" => "...-..-", "'" => ".----.",
    "(" => "-.--.", ")" => "-.--.-", "+" => ".-.-.", "," => "--..--",
    "-" => "-....-", "." => ".-.-.-", "/" => "-..-.", "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" => "--..",
    "[" => "-.--.", "]" => "-.--.-", "_" => "..--.-",
}

mor2str = {}

# Creiamo una mappa invertita
MORSE.each { |k, v| mor2str[v] = k }

def to_morse(str)
  r = []
  str.chars.each do |s|
    r << MORSE[s.upcase]
  end
  return r.join " "
end

def from_morse(str)
  w = str.split(" ")
  r = []
  w.each do |s|
    r << mor2str[s]
  end
  return r.join
end