javascript - 向后编写文本置乱算法

标签 javascript jquery algorithm

解释

为了好玩,我正在构建一个简单的单词加扰器/编码器。给定一个种子和要转换的文本,使原始字符串变得难以辨认的算法是:

  1. 遍历用户给定种子的字符,比如“lkj”
  2. 遍历要转换的文本字符,说“你好”
  3. 根据可接受的字符列表获取两者的索引;所以如果 [a-z] 是可以加扰的字符,并且循环在种子和转换文本的索引 0 上,我会得到 l = index 11h = 索引 7
  4. 将这两个索引相加。 11 + 7 = 18。如果索引超过接受列表的长度,则减少新索引的长度(例如 33 - 26)。
  5. 获取接受列表中索引 18 对应的字符。 s 在索引 18 处
  6. 重复直到循环遍历所有的转换字符,如果文本超过种子的长度则返回当前种子索引为0

我们以“souwy”结尾。

解码文本的算法(应该使用相同的种子)只是向后做所有事情。从字符串的末尾开始,在它将停止的索引处开始向后循环遍历种子 (seed.length % text.length),减去索引而不是添加,然后反转生成的字符串.因此,如果我们输入“lkj”作为种子并输入“souwy”作为转换文本,我们将在解码时返回“hello”。

问题

解码似乎只有时 有效。对于种子和转换文本的某种组合,算法失败了——但我不知道它可能是什么。例如,使用以下信息:

Seed: lkj

Input: Hey guys! My email is yay@someDomain.com, but don't send me anything U_U

解码失败。但是,如果将“x”添加到输入的末尾,它就可以工作。可能出了什么问题?

Fiddle

最佳答案

当消息的长度是种子长度的倍数时,看起来你有一个错误。

问题行是:

var is_currSeed = (numLastWords > 0) ? (numLastWords - 1) : 0

应该改为:

var is_currSeed = (numLastWords > 0) ? (numLastWords - 1) : seed.length - 1;

这是一个 working version .

关于javascript - 向后编写文本置乱算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23436179/

相关文章:

javascript - 判断数组中的某个元素是否为字符串

javascript - 更改动态表 AngularJS/JavaScript 中文本的颜色

javascript - 为什么 jquery 看不到 html 的变化?

javascript - 按品牌一一展示产品系列

algorithm - 如何在文本中找到相关区域?

javascript - 从给定节点查找树中父节点的路径

javascript - onfocus时如何更改文本框的背景颜色?

javascript - 具有 i18n(归类)支持的 JQuery 可过滤插件

algorithm - 压缩字母数字字符串

javascript - 在页面上创建覆盖的书签