Я хотел бы зашифровать одну строку текста, используя следующую схему шифрования.
Это пример ввода. Сначала из текста удаляются пробелы.
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.info(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
}


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


easy => array.joint ('') в конце и двойной цикл
const s = "haveaniceday";
let result = encryption(s);
console.info ('result =', result );
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"]
let Respons = [];
for (let i=0, iMax=chunks[0].length; i<iMax; i++ ) {
Respons[i] = '';
for (let txt of chunks ) {
Respons[i] += txt.charAt(i);
}
}
return Respons.join(' ');
}
function chunkSubstr(str, size) {
const
numChunks = Math.ceil(str.length / size),
chunks = new Array(numChunks)
;
for (let i = 0, o = 0; i < numChunks; ++i, o += size) {
chunks[i] = str.substr(o, size)
}
return chunks
}Они хотят "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.info(chunks);
let output = '';
for (var i=0; i<col; i++) {
chunks.forEach((e) => {
if (e[i]) {
output += e[i];
}
});
output += ' ';
}
console.info(output);
}
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
} 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.info(chunks);
var result = [];
for (var i = 0; i < chunks.length; i++) {
// do some magic here...
// expected output: "hae and via ecy"
var split = Array.from(chunks[i]);
for (var s = 0; s < split.length; s++) {
var previousValue = '';
if (result[s])
{ previousValue = result[s];}
result[s]=previousValue + split[s];
}
}
console.info(result);
}
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.info(output.join(' '));
Перестаньте относиться к программированию как к магии: теперь вам нужно получить первый символ из первого «слова», затем первый символ из второго «слова», ..., затем второй символ из первого «слова» и т. д.