ruby - 替换管道字符“|” 带行空格
问题描述
我正在尝试解决有关摩尔斯电码的代码挑战,其想法是:
- 接收:
morse_text = '.... ..|--. ..- -.-- ...'
- 返回:
'HI GUYS'
- 但我越来越
'HIGUYS'
管道应转换为两个单词之间的空格。到目前为止,我得到了:
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
我正在努力将管道转换为空白空间,以便获得所需的结果。
解决方案
问题是您将管道转换为空格,这意味着您丢失了单词的唯一分隔符并将其视为字符的标准分隔符。取而代之的是,由管道分割并操作一组单词:
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"
推荐阅读
- elasticsearch - Fluent Bit Filter 将 Unix Epoch 时间戳转换为人类可读的时间格式
- php - 自定义 PHP 狙击程序,用于向管理员发送电子邮件通知,以了解 WooCommerce 中的待处理订单状态,从而导致处理订单的电子邮件重复
- google-maps - Google Maps SDK for Unity 在特定区域不起作用
- select - 想在一个选择的情况下使用 distinct
- sql - 表只有 FK 时无法返回列表?
- google-app-engine - 如何为谷歌云应用版本添加可写权限?
- python - Django 无法调用自定义 django 命令 extwith call_command
- php - 如何在 3.2.13 版本中禁用 symfony 开发模式和分析器
- java - 如果我将数据源从 `H2` 切换到 `postgresql`,`hibernate.hbm2ddl.import_files` 属性将停止工作
- swift - 将 Alamofire 与 .publishDecodable 一起使用