代码执行良好,但我缺少一个规范:在莫尔斯电码中,同一单词的字母之间的空格必须替换为空格。例如:hi在莫尔斯电码中是......(4点,空格,2点)....代码无法识别我在主散列中表示此分隔的方式--〉“”=〉““
有什么想法我错过了吗?谢谢
代码如下:
MASTER = { "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" => "--..",
" " => "|",
"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" => "--..",
"," => " ",
"" => " ",
"'" => " " }
def encode(text)
# TODO: write a method which returns the morse sentence for the given text
# NOTE: you may want to extract a `encode_word` method
encode_word = ""
text.chars.each { |element| encode_word << element.gsub(/(\w|\W)/, MASTER) }
encode_word
end
3条答案
按热度按时间ztigrdn81#
密码
首先,让我们使用
word.chars.map { |letter| MASTER[letter] }
从哈希中获得哈希等价值,然后使用正则表达式/(?<=\w) (?=\w)/
替换空白空间。示例输入
输出
cidc1ykv2#
将文本按空格(或者任何空格)拆分为单词,使用莫尔斯电码替换表翻译单词中的每个字符,然后将所有内容重新连接在一起(用空格连接字符,用管道连接单词)。
注意
é
将导致一个错误.uplii1fm3#
假设
master
是问题中给出的哈希值。假设
我们可以如下修改
text
。请参见字符串#gsub。
正则表达式具有以下元素。
如果匹配的第一个字符后面跟着另一个字符,则将执行正向前查找,并且将随后的字符保存到捕获组1并由全局变量
$1
保存。如果匹配的第一个字符是字符串中的最后一个字符,则不会执行向前查找。在这种情况下,
$1 #=> nil
。表达
读取“匹配的字符(
'c'
)既不是空格,也不是字符串的最后一个字符($1
),并且后面的字符不是空格($1 != ' '
)"。请注意,这种方法直接操作字符串,而不是将其分解为单词,将每个单词转换为字母数组,操作这些数组,然后将结果转换回字符串。