解释
我正在构建一个简单的单词加扰器/编码器以获得乐趣。给定种子和要转换的文本,将原始字符串变得难以辨认的算法是:
[a-z]
是可以加扰的字符,并且种子和转换文本的循环都在索引0上,我会得到l = index 11
和h = index 7
11 + 7 = 18
。如果索引超过了接受列表的长度,则从新索引中减去该长度(例如33 - 26
)。s is at index 18
我们最终得到了“souwy”。
解码文本的算法(应该使用相同的种子)只是向后做所有事情。从字符串的末尾开始,在它将停在(seed.length % text.length
)的索引处向后循环遍历种子,减去索引而不是添加,然后反转生成的字符串。因此,如果我们输入“lkj”作为种子并将“souwy”作为转换文本输入,我们将在解码时返回“hello”。
问题
解码似乎只能有时。通过种子和转换文本的某种组合,算法失败了 - 但我不知道它可能是什么。例如,使用以下信息:
种子:lkj输入:嘿伙计们!我的电子邮件是yay@someDomain.com,但是没有给我发送任何东西U_U
解码失败。但是,如果在输入的末尾添加了'x',它就可以工作。可能出现什么问题?
答案 0 :(得分:2)
当邮件的长度是种子长度的倍数时,您看起来有一个错误。
问题在于:
var is_currSeed = (numLastWords > 0) ? (numLastWords - 1) : 0
应更改为:
var is_currSeed = (numLastWords > 0) ? (numLastWords - 1) : seed.length - 1;
这里是working version。