Я хотел бы зашифровать одну строку текста, используя следующую схему шифрования.
Это пример ввода.Сначала пробелы удаляются из текста.
haveaniceday
Затем возвращается длина строки (L = 12)
.Затем символы записываются в сетку, строки и столбцы которой имеют следующие ограничения:
Длина строки возвращает квадратный корень из L
в диапазоне от 3
до 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
}