Строковое шифрование JavaScript - PullRequest
0 голосов
/ 20 декабря 2018

Я хотел бы зашифровать одну строку текста, используя следующую схему шифрования.

Это пример ввода.Сначала пробелы удаляются из текста.

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
}

Ответы [ 4 ]

0 голосов
/ 20 декабря 2018

Вы можете уменьшить свой массив ["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(' '));
0 голосов
/ 20 декабря 2018

Вы можете получить каждый символ в кусках, зациклив счетчик столбцов.

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);

  let output = '';
  for (var i=0; i<col; i++) {
    chunks.forEach((e) => {
      if (e[i]) {
        output += e[i];
      }
    });
    output += ' ';
  }
  console.log(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
}
0 голосов
/ 20 декабря 2018
    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);
      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.log(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
    }
0 голосов
/ 20 декабря 2018

easy => array.joint ('') в конце и двойной цикл

const s = "haveaniceday";
let result = encryption(s);

console.log ('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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...