Ruby Morse解码器

以太GÜR

我试图创建一个莫尔斯解码器。它用莫尔斯电码代替拉丁字母。字母之间有一个空格,单词之间有三个空格。

def decodeMorse(morseCode)
morse_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" => "-----"
}

wordList = morseCode.split(" ")

wordList.each do |word|
  word = word.downcase
  word.split("").each do |letter|
    a = ' ' + morse_dict[letter].to_s + ' '
    word.gsub! letter a
  end
end

sentence = wordList.join(' ')

return sentence.lstrip

end

puts decodeMorse("Example from description")

然后我得到了这个错误:

NoMethodError: undefined method `letter' for main:Object
    from codewars.rb:12:in `block (2 levels) in decodeMorse'
    from codewars.rb:10:in `each'
    from codewars.rb:10:in `block in decodeMorse'
    from codewars.rb:8:in `each'
    from codewars.rb:8:in `decodeMorse'

怎么了?

阿列克谢·马蒂什金(Alexei Matiushkin)

问题在这里:

word.gsub! letter a

因为没有逗号lettera所以将其从右向左进行解释,并将其视为letter(a)函数调用。你想同时lettera作为参数传递给函数调用⇒他们分开传递用逗号

#                ⇓ HERE
word.gsub! letter, a

顺便说一句,gsub可能将哈希作为第二个参数进行替换:

word.gsub(/./, morse_dict)

会将所有字母更改为摩尔斯表示。要处理空格,可能gsub需要一个代码块:

word.gsub(/./) { |l| " #{morse_dict[l]} " }.squeeze(' ')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章