【问题标题】:JavaScript String EncryptionJavaScript 字符串加密
【发布时间】:2019-05-20 13:25:00
【问题描述】:

我想使用以下加密方案加密一行文本。

这是示例输入。首先,从文本中删除空格。

haveaniceday

然后,返回字符串(L = 12) 的长度。接下来,将字符写入网格,其行和列具有以下约束:

字符串的长度将返回L 的平方根在34 之间。因此,改写为 3 行 4 列:

have
anic
eday

最后通过在一列中显示字符,插入一个空格,然后显示下一列并插入一个空格,以此类推,得到编码的消息。

例如,上述矩形的编码消息是:

hae and via ecy

在我的代码 sn-ps 中,网格["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
}

【问题讨论】:

  • 停止将编程视为魔术:现在您需要从第一个“单词”中获取第一个字符,然后从第二个“单词”中获取第一个字符,...,然后从第一个“单词”中获取第二个字符"等

标签: javascript arrays string algorithm ecmascript-6


【解决方案1】:

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
}

【讨论】:

  • 他们想要"hae and via ecy" 而不是"have anic eday"
【解决方案2】:

你可以通过循环 col 的计数来获取每个字符。

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
}

【讨论】:

    【解决方案3】:
        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
        }
    

    【讨论】:

      【解决方案4】:

      你可以reduce你的数组["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(' '));

      【讨论】:

        猜你喜欢
        • 2013-08-19
        • 2018-10-31
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多