javascript - JavaScript 字符串加密
问题描述
我想使用以下加密方案加密一行文本。
这是样本输入。首先,从文本中删除空格。
haveaniceday
然后,返回字符串的长度(L = 12)
。接下来,将字符写入网格,其行和列具有以下约束:
L
字符串的长度将返回is between3
和的平方根4
。因此,改写为 3 行 4 列:
have
anic
eday
最后,通过显示一列中的字符,插入一个空格,然后显示下一列并插入一个空格,等等来获得编码的消息。
例如,上述矩形的编码消息是:
hae and via ecy
在我的代码片段中,网格["have", "anic", "eday"]
已经创建,但我不知道如何实现下一阶段。
const s = "haveaniceday";
let result = encryption(s);
function encryption(s) {
let sqr = Math.sqrt(s.length),
col = Math.ceil(sqr),
row = Math.floor(sqr);
let chunks = chunkSubstr(s, col);
// => ["have", "anic", "eday"]
console.log(chunks);
for (var i = 0; i < chunks.length; i++) {
// do some magic here...
// expected output: "hae and via ecy"
}
}
function chunkSubstr(str, size) {
const numChunks = Math.ceil(str.length / size)
const chunks = new Array(numChunks)
for (let i = 0, o = 0; i < numChunks; ++i, o += size) {
chunks[i] = str.substr(o, size)
}
return chunks
}
解决方案
您可以在另一个数组中减少您的数组["have" "anic" "eday"]
,即字符串的长度。对于原始数组的每三个成员,您将其所有字符映射到新数组中。
const original = ["have", "anic", "eday"];
const output = original.reduce((out, word) => {
word.split("") // break into characters[]
.forEach((char, i) =>
out[i] += char // append this char to the corresponding string of `out`
);
return out;
}, new Array(original[0].length).fill('')) // ['', '', '', '']
console.log(output.join(' '));
推荐阅读
- php - 遵循规则-“if”语句需要调用一个函数而不是有一个主体'-我坚持在 3 种方法之间进行选择
- arrays - Excel - 计算多列中一对值的出现次数
- mysql - 每天将oracle数据库的查询结果存入MySql数据库
- c# - Amazon MarketplaceWebService (c#):缺少卖家所需的 MWSAuthToken
- javascript - 如何在javascript中设置从数据库输入的最大数量?
- r - R中的新列是累积计数(加起来)唯一日期
- asp.net - SignalR 与 SignalR 核心性能
- c++ - c++ 基类欠精细
- json - 类型错误:
不是 JSON 可序列化的 - c - 编写一个 C 程序,使用数组从 100 个随机数的列表中找出最大和最小的数