You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用已创建的密码替换板函数实现单词加解密?

修复你的Enigma替换板加解密函数

我来帮你搞定这个加解密函数!你的原始代码有几个关键问题:变量引用混乱、没实现双向替换逻辑,也没正确处理字符映射。我们一步步来修正:

先明确问题核心

替换板的逻辑是双向映射:比如你的示例里h对应q,那q也必须对应h;不管输入是大写还是小写,最终输出统一为小写(和你的示例要求一致)。

先回顾你的替换板生成函数

这个是没问题的,我们保留:

plugboard <- function(){
  matrix(sample(letters, 26), nrow = 2, ncol = 13)
}

正确的加解密函数实现

下面这个函数支持双向加解密,能处理大小写输入,完全符合你的需求:

plugboard_cipher <- function(word, plug_matrix) {
  # 1. 将输入统一转为小写,确保大小写不影响结果
  word_lower <- tolower(word)
  
  # 2. 创建双向映射表:把替换板的两行互相映射
  # 第一行字符 -> 第二行字符,同时第二行字符 -> 第一行字符
  mapping <- c(
    setNames(plug_matrix[2, ], plug_matrix[1, ]),
    setNames(plug_matrix[1, ], plug_matrix[2, ])
  )
  
  # 3. 拆分输入字符,逐个替换后拼接成结果
  chars <- strsplit(word_lower, "")[[1]]
  replaced_chars <- mapping[chars]
  
  # 4. 返回最终拼接后的字符串
  paste(replaced_chars, collapse = "")
}

测试你的示例场景

用你提供的替换板矩阵来验证:

# 初始化你给的示例替换板
example_plug <- matrix(
  c("v","h","k","a","w","l","f","d","u","r","t","m","s",
    "p","q","b","g","x","y","i","n","z","o","j","e","c"),
  nrow = 2, ncol = 13
)

# 测试加密:输入大写/小写的HOUSE
plugboard_cipher("HOUSE", example_plug) # 输出 "qrzcm"
plugboard_cipher("house", example_plug) # 同样输出 "qrzcm"

# 测试解密:输入qrzcm
plugboard_cipher("qrzcm", example_plug) # 输出 "house"

你的原始函数的问题分析

  1. 变量逻辑混乱:函数参数是word,但你直接用未定义的x,还写了word <- x,完全搞反了变量赋值
  2. 大小写处理无效:tolower(x)只是调用了函数,但没有把结果赋值给变量,所以输入的大写字母不会被转换
  3. 替换逻辑不完整:只做了第一行到第二行的单向替换,没有处理反向解密的情况;而且gsub的替换方式不如向量索引精准
  4. 缺少返回值:函数最后没有返回任何结果,所以运行后不会输出内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:22:57