首页 > 解决方案 > 替换管道字符“|” 带行空格

问题描述

我正在尝试解决有关摩尔斯电码的代码挑战,其想法是:

管道应转换为两个单词之间的空格。到目前为止,我得到了:

def decode(morse_text)
  # TODO: Decode the morse text
  morse_text = morse_text.tr("|", " ")
  array = morse_text.split(" ").map { |word| encode_word.invert[word].upcase }
  array.join
end

def encode_word
  morse_code = {
    "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" => "--..",
    " " => "|"
  }
end

我正在努力将管道转换为空白空间,以便获得所需的结果。

标签: ruby

解决方案


问题是您将管道转换为空格,这意味着您丢失了单词的唯一分隔符并将其视为字符的标准分隔符。取而代之的是,由管道分割并操作一组单词:

def decode(morse_text)
  # Split the morse code into an array of encoded words
  encoded_words = morse_text.split('|')

  # Decode each word letter by letter
  decoded_words = encoded_words.map do |word|
    word.split(' ').map { |letter| encode_word.invert[letter].upcase }
  end

  # Join each decoded word into a string
  joined_words = decoded_words.map { |word| word.join }

  # Join each word into a single string
  decoded_text = joined_words.join(' ')
end

结果是:

decode('.... ..|--. ..- -.-- ...')
=> "HI GUYS"

推荐阅读