You need to enable JavaScript to run this app. 如何编写适配指定加密规则的Ruby字符串解密方法
优惠活动
大模型
产品
解决方案
定价
更多

如何编写适配指定加密规则的Ruby字符串解密方法

解密方法实现

核心问题解决思路

顺着给定的加密规则反向推导,两个卡点的处理逻辑非常明确:

  • 加密时对原单词做了首字母替换为ASCII编码、第二个字母和最后一个字母互换两个操作。由于互换是对称操作,解密时只需要对剔除数字后的剩余字符段,再执行一次第一个字符和最后一个字符的互换,就能还原出原单词去掉首字母的部分。
  • 把还原得到的首字母,和处理好的剩余字符段拼接成完整单词,最后将所有处理完成的单词用空格连接,就是最终的解密结果。

边界处理

当剔除数字后的剩余字符长度小于2时,不存在可独立互换的两个字符,直接使用原剩余串即可,避免空范围操作引发的异常。

Ruby风格的完整实现

def decipher(string)
  string.split.map do |word|
    # 提取连续数字,转为对应ASCII字符作为单词首字母
    first_char = word[/\d+/].to_i.chr
    # 剔除数字得到原单词去掉首字母的剩余串
    rest_str = word.gsub(/\d+/, "")
    # 对剩余串做首尾字符互换
    processed_rest = if rest_str.length >= 2
                       rest_str[-1] + rest_str[1..-2] + rest_str[0]
                     else
                       rest_str
                     end
    # 拼接为完整解密单词
    first_char + processed_rest
  end.join(" ")
end

实现说明

  • Ruby字符串支持负索引取值:rest_str[-1]直接获取最后一个字符,rest_str[1..-2]获取从第二个字符到倒数第二个字符的中间段,rest_str[0]获取第一个字符,三者拼接就完成了首尾互换。
  • 用正则word[/\d+/]直接匹配字符串中的连续数字,比手动调用match的写法更简洁,是Ruby的惯用写法。
  • 不带参数的split方法会自动按任意长度的空白符拆分,比手动指定分割符为空格的兼容性更好。

效果验证

运行测试用例的输出结果完全匹配给定的规则:

decipher("65 119esi 111dl 111lw 108dvei 105n 97n 111ka")
# 输出:"A wise old owl lived in an oak"
decipher("84eh 109ero 104e 115wa 116eh 108sse 104e 115eokp")
# 输出:"The more he saw the less he spoke"
decipher("84kanh 121uo 80roti 102ro 97ll 121ruo 104ple")
# 输出:"Thank you Piotr for all your help"

内容的提问来源于stack exchange,提问作者Sam P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 20:45:04